0

これは、プログラミング スタック エクスチェンジでの質問に似ています: https://softwareengineering.stackexchange.com/questions/158247/binary-representation-in-python-and-keeping-leading-zeros

基本的に、16 進数で追跡しているいくつかの数字があります。

SOME_NUMBERS = (0xAABBCCDDEEFF, 0xAA55AA55AA55, 0xBEEF0000BEEF)

ただし、Python は私を出し抜こうとし、考えすぎてしまうため、値をファイルに書き込むと、16 進エディターで次のようになります。

00 00 00 00 00 00 00 00 00 00 AA BB CC DD EE FF

Python は 48 ビットの数値を 64 ビットまたは 128 ビットの数値として保存し、書き込むように見えます。先頭のゼロがファイルに書き込まれないようにするにはどうすればよいですか? 比較すると、 を使用する場合numpy.random.bytes(6)、Python は先行ゼロなしで値をファイルに書き込むので、これを行うことができるはずです。考え?

4

5 に答える 5

2

48 ビットのバイナリ値をファイルに書き込む場合は、自分で 6 バイトを書き込む必要があります。その長さのネイティブの数値形式はありません。モジュールを使用してstruct、値をバイトに変換します。

packed = struct.pack('>q', value) # 64 bits (8 bytes)
f.write(packed[-6:])
于 2013-09-12T14:47:06.103 に答える
2

重要なことは、数字をどのように詰め込んでいるかです。1 バイトを書き込むことができます。数値形式が 6 バイトであることは珍しいことです。値の1つに対して次のことが機能することがわかりました。

import struct

outfile = 'output.dat'
fh = open(outfile, "wb")

var = struct.pack('6B', 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF)

fh.write(var)
fh.close()

short、int、long (またはそれらの組み合わせ) などの他の型を使用すると、エンディアンの問題が発生する可能性があります。

于 2013-09-12T12:58:03.803 に答える