次のように、int を Python のバイト文字列にパックしたい: pack 29 into '\x1d\x00'. どうすればいいですか?
5356 次
1 に答える
8
struct
モジュールを使用します。
>>> import struct
>>> struct.pack( "<H", 29 )
'\x1d\x00'
書式文字の説明については、ドキュメントを参照してください。関連する部分の要約は次のとおりです。
文字'H'
は unsigned short を意味します。
'<'
サイズ、バイト順、配置を指定する接頭辞です。
ここでいうサイズとは、unsigned short が実際に何ビットであるかを意味します。'<'
、'='
、'!'
、またはのいずれかで指定された「標準サイズ」では'>'
、これは 16 ビットです。'@' (デフォルト) を使用すると、サイズは実装によって定義されます (ただし、unsigned short の場合でも、16 ビットになる可能性はかなり高くなります)。
バイト オーダーとは、最上位バイトがバイト シーケンスの最初または最後に来るかどうかを意味します。最も重要な最初のものは「ビッグエンディアン」と呼ばれ、'>'
;で指定されます。struct.pack( ">H", 29)
です'\x00\x1d'
。最下位の最初は「リトルエンディアン」と呼ばれ、あなたの例に示されているものです -29
にエンコードし'\x1d\x00'
ます。
(要素を 1 つしかパックしていないため、配置は目的には関係ありません。)
于 2013-11-13T13:39:42.577 に答える