2010-08-19 18 views
0

J'ai une chaîne encodée en format Little Endian (le moins significatif en premier), et je veux le décoder en un nombre. Pour le codeur, le premier bit du dernier octet indique si le nombre est positif ou négatif. Est-ce que quelqu'un sait comment faire ça?Comment convertir une chaîne d'octets en Nombre?

Voici mon décodeur:

decode:function(str,type){ 
     var num=0; 
     var len=size(type)-(type.signed?1:0); 
     var totalBits=0; 
     for(var i=0;i<len;i++){ 
      num+=(str.charCodeAt(i)<<totalBits)); 
      totalBits+=8; 
     } 
     if(type.signed){ 
      var b=str.charCodeAt(size(type)-1); 
      var neg=(b>=128); 
      if(neg){ 
       b-=128; 
      } 
      num+=b; 
      num*=(neg?-1:1); 
     } 
     return num; 
    } 

Merci.

+0

Si c'est votre encodeur, pourquoi l'appelle-t-on "décoder"? Il semble bien que c'est * décodage * d'une chaîne. – Pointy

+0

Désolé, c'est mon décodeur ... faute de frappe :) – Maz

Répondre

0

Il est plus facile de lire la chaîne de droite à gauche. Vous pourriez faire quelque chose comme ceci:

/* decode. assume size(str) > 0 */ 
function (str,type) { 
    var len = size(str); 
    var num = str.charCodeAt(len - 1); 
    if (type.signed && (num >= 128)) { 
    num = num - 256; 
    } 
    for (var i = (len - 2); i >= 0; i--) { 
    num = 256 * num + str.charCodeAt(i); 
    } 
    return num; 
}