2016-06-18 33 views
0

我想將一些現有的代碼從python移植到javascript,並且不確定如何去下一行。如何在JavaScript中解壓二進制文件?

var1, var2 = struct.unpack('<II', buf[:8]) 

它應該從緩衝區獲取兩個整數。緩衝區以二進制開始,但此時它已轉換爲字節(即字節(buf))。

示例緩衝區:

<Buffer 35 8a 0a 24 16 ed ea 42 88 28 b1 20 b1 cf c9 a1 c9 cc 5c 0b 18 b0 70 3a 8c b8 83 ee d6 ca 55 bf f9 75 1c 94 46 8c 17 03 01 00 20 5a 17 be 43 ba 08 a6 ... > 
+0

什麼是您的緩衝區看起來像在JavaScript? 'Uint8Array'? –

+1

緩衝區看起來像'var buf = new Buffer(0);'。這是一個在nodejs中使用cap的數據包緩衝區。 – codephobia

+0

^請考慮下次將這些重要信息包含在您的問題中 –

回答

1

如果你的緩衝區使Node.js Buffer

var buf = new Buffer([0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00]); 

console.log(buf.readUInt32LE(0), buf.readUInt32LE(4)); 

如果你的緩衝區是typed arrays

let buf = new Uint8Array([0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00]); 
 
    uint32 = new Uint32Array(buf.buffer); 
 

 
console.log(uint32[0], uint32[1]); // 255 and 65535 on little endian architectures

如果你的緩衝區是一個標準的數組:

let buf = [0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF]; 
 

 
let var1 = buf[0] * 0x1000000 + (buf[1] << 16) + (buf[2] << 8) + buf[3], 
 
    var2 = buf[4] * 0x1000000 + (buf[5] << 16) + (buf[6] << 8) + buf[7]; 
 

 
console.log(var1, var2); // 255 and 65535 on all architectures

您可能也有興趣destructuring assignment(因爲ES6):

let var1, var2; 
[var1, var2] = [1, 2]; 
+0

這不會給我一個錯誤,但我不認爲它給我的數字我正在尋找。我爲我的問題添加了一個示例緩衝區。 – codephobia

+0

查看更新的答案。順便說一句:如果你在第二個例子中用'uint32 = new Uint32Array(buf);'替換了'uint32 = new Uint32Array(buf.buffer);',那麼'buf'也是你的node.js緩衝區。 –

相關問題