2017-08-01 17 views
0

バイト配列(Node.jsバッファ)に32ビット整数を書き込もうとしています。Pythonでバッファに32ビット整数を書き込む

私が知っているように、Node.jsバッファオブジェクトallocUnsafe関数は、16進形式でエンコードされた擬似乱数生成配列の配列を返します。

は、だから私は、PythonでのNode.js Buffer.allocUnsafe(n)法解釈:

[c.encode('hex') for c in os.urandom(n)]

をしかし、その後、allocUnsafe機能は独自のネストされた関数writeInt32BE(value, offset)writeInt32LE(value, offset)を持って、私は、公式ドキュメントを読んでいるが、私はしませんでしたこれらの関数から正確に返されたものを理解する。

これらのNode.js関数にはPythonの同等のメソッドがありますか?私はPythonの同等のアクションがstructモジュールとfrom_bytesメソッドでも実行できることを知っているように、しかし、私はどのようにわからない。前もって感謝します。

答えて

1

Pythonは、我々は4すなわち4*8 = 32 bitsことがto_bytesメソッドの長さを取る32ビットに番号を変換するためにだからint.to_bytes(size,byteorder)参照here
ような方法を提供します。
int.from_bytes関数はバイトhere

>>> n = 512 
>>> n_byte = (n).to_bytes(4,byteorder='big') 
b'\x00\x00\x02\x00' 
>>> int.from_bytes(n_byte,byteorder='big') 
512 

デフォルトバイトで表現整数の表現を署名さを見るintに変換します。ドキュメントから

>>> int.from_bytes(b'\x00\x10', byteorder='big') 16 
>>> int.from_bytes(b'\x00\x10', byteorder='little') 4096 
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) 
-1024 
>>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=False) 64512 
>>> int.from_bytes([255, 0, 0], byteorder='big') 16711680 

あなたは答えを

>>> hex(6) 
'0x6' 
>>> int('0xfeedface',16) 
4277009102 
+0

こんにちは、感謝を整数に変換する16進数表現をチェックアウトすることができます。私が誤解して申し訳ありませんが、 '28 9f 04 03 01 00 00 00 04 00'のNode.jsバッファは' writeUInt32BE'メソッドで '6'を返しますが、Pythonの' int.from_bytes(b '(\ x9f \ x04 \ 'big '、signed = False)' 191827980698406220727296'引数を間違って入力しましたか?(from_bytes関数の最初の引数はNode.jsのバッファー文字が16進数でデコードされています) 。 – ShellRox

+0

@ShellRox上記の6のバッファ表現からロジックを動かすことができますか? –

+0

これを逃してお詫び申し上げます。私は 'Buffer.allocUnsafe(10).writeUInt32BE(2、2)'を使って6を得ました。 – ShellRox

関連する問題