2016-06-18 15 views
0

私はいくつかの既存のコードをPythonからjavascriptに移植しようとしていますが、次の行についてはわかりません。javascriptでバイナリを解凍する方法は?

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

バッファから2つのintを取得する必要があります。バッファはバイナリで始まりますが、この時点ではバイト(つまりバイト(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の場合:あなたのバッファがtyped arraysある場合

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

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

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

更新された回答を参照してください。 BTW: 'uint32 = new Uint32Array(buf.buffer);を' uint32 = new Uint32Array(buf);に置き換えると、 'buf'がnode.jsバッファである2番目の例でも動作するはずです。 –

関連する問題