2016-07-22 10 views
0

ich diese Funktion erstellt einen Integer von einem Puffer analysieren:Parse Integer von Buffer

var makeInt = function(b1, b2, b3, b4) { 
    return ((b1 << 0) & 0x000000FF) + 
      ((b2 << 8) & 0x0000FF00) + 
      ((b3 << 16) & 0x00FF0000) + 
      ((b4 << 24) & 0xFF000000); 
} 

Von einem Puffer ich die Integer so lesen:

var buffer = new Buffer([0,0,15,47,0,0,0,64,0,0]) 

console.log(makeInt(buffer[3],buffer[2],buffer[1],buffer[0])) 

=> 3887 

Was aus der offiziellen Pufferfunktion ist https://nodejs.org/api/buffer.html das funktioniert genauso wie meine makeInt Funktion?

Ich versuchte https://nodejs.org/api/buffer.html#buffer_buf_readuintbe_offset_bytelength_noassert

Aber buf.readUIntLE(offset, byteLength[, noAssert]) kehrt:

buffer.readUIntLE(0, 3) 

=> 983040 

Warum ist es nicht zurückkehren 3887 != 983040?

Dank

Antwort

2

Mit 4 Stichen, aber bestanden 3. bis Art und Weise gibt es Nummer zu speichern - Little-Endian und Big-Endian. Es scheint, dass dein Code Big-Endian ist.

var buffer = new Buffer([0,0,15,47,0,0,0,64,0,0]); 
console.log(buffer.readUIntBE(0, 4)); 
+0

Funktioniert, Vielen Dank! –