2016-10-09 3 views
0

Ich habe einen Wert, der integrale Form ist, aber ich weiß nicht, ob es Uint8 oder Uint16 oder Uint32 ist. Jetzt möchte ich Bytegröße es zum Beispiel bekommen ich eine Sache wie diese wollen:Get Byte Größe des Wertes in Javascript

var a = 100;  // 1100100 
var b = 1000; // 1111101000 
console.log (byteSizeOf(a)); // --> 2 
console.log (byteSizeOf(b)); // --> 3 

Wer kann mir helfen?

+0

haben Sie versucht https://github.com/inexorabletash /Textentschlüsselung ? – Majid

+0

its (signed) int32, das ist eine "Optimierung", auf die man sich heutzutage verlassen kann, afaik. Die Spezifikation definiert alle Zahlen in JS als doubles (64Bit Fließkommawerte) – Thomas

Antwort

0

können Sie grundlegende mathematische verwenden, wenn das ist nur Dezimalzahlen Sie Größe benötigen:

Math.ceil(Math.log2(100)/4) 

-> 2

Math.ceil(Math.log2(1000)/4) 

-> 3

Aber Sie haben auch um den räumlichen Fall von 0 und 1 zu behandeln:

function byteSizeOf(x) { 
    return (x < 2)?1:Math.ceil(Math.log2(x)/4); 
} 

Sie können wie hier Nummer Binärkette konvertieren: how do I convert an integer to binary in javascript?

function dec2bin(dec){ 
    return (dec >>> 0).toString(2); 
} 

Und dann können Sie das Ergebnis Binärfeldes konvertieren:

"110011".split().map(function(x){return parseInt(x);}) 
+0

Tanks für Ihre Antwort, aber ist es möglich, seine binären Daten zu bekommen? zum Beispiel für 100 bekomme '1100100'. – pooyan

+0

bedeutete ich, dass wir 100 zu Funktion senden und es 1100100 zurückgibt. Und auch keine Zeichenfolge (es sollte Nummer sein) – pooyan

+0

eine Nummer? js hat keine Binärzahlen, daher wird 1100100 als Dezimalzahl interpretiert. Bedeutet, dass es als String dargestellt werden muss. –

Verwandte Themen