2017-05-31 1 views
0

J'ai une petite chaîne hexadécimée qui doit être convertie en un nombre décimal en JavaScript.Analyse d'une petite chaîne hexadécimal en décimal

Exemple chaîne hexadécimale: « 12AB34CD » Pour obtenir la valeur correcte, il faut échanger les octets à ceci: « CD34AB12 »

Actuellement j'échange juste les octets en utilisant substring puis utilisez parseInt().

var string = "12AB34CD"; 
var parsedInt = parseInt("0x" + string.substring(6,8) + string.substring(4,6)+ string.substring(2,4) + string.substring(0,2); 

J'ai beaucoup de données avec longueur inconnue pour analyser, donc je me demandais s'il y a une meilleure façon.

+0

Que voulez-vous appeler "plus simple" ou "plus facile"? Je ne ferais qu'un changement mineur, mais ce n'est qu'une chose que je ferais comme ça: 'parseInt (string.substr (6,2) + string.substr (4,2) + string.substr (2,2) + string.substr (0,2), 16); ' – Thomas

+0

@Thomas Eh bien, j'ai beaucoup de chaîne hexagonale différente avec des longueurs différentes, ce faisant chaque fois est une sorte de glisser – Jan

Répondre

6

Vous pouvez utiliser quelque chose comme ça pour échanger les octets:

var endian = "12AB34CD"; 
 

 
var r = parseInt('0x'+endian.match(/../g).reverse().join('')); 
 

 
console.log(r); // Decimal 
 
console.log(r.toString(16).toUpperCase()); // Hex

+0

Je ne peux pas parler de votre nom :-) - très bien - je vote pour vous. –

0

je suis venu avec moi-même, mais la réponse acceptée est beaucoup plus courte.

var hexstring = "12AB34CD"; 
 

 
function littleEndianHexStringToDecimal(string) 
 
{ 
 
    if(!string) return undefined; 
 
    var len = string.length; 
 
    var bigEndianHexString = "0x"; 
 
    for(var i = 0; i < len/2; i++) 
 
    { 
 
     bigEndianHexString += string.substring((len-((i+1)*2)),(len-(i*2))); 
 
    } 
 
    return parseInt(bigEndianHexString); 
 
} 
 

 
console.log(littleEndianHexStringToDecimal(hexstring));