3

numpyfloat32tofile().

float_num = float32(3.4353)
float_num.tofile('float_test.bin')

numpy で読み取ることができますが、fromfile()それは私のニーズに合わないため、bitstringモジュールの助けを借りて生のバイナリとして読み取る必要があります。

だから私は次のことをします:

my_file = open('float_test.bin', 'rb')
raw_data = ConstBitStream(my_file)
float_num_ = raw_data.readlist('float:32')

print float_num
print float_num_

出力:

3.4353
-5.56134659129e+32

原因は何ですか?2 番目の出力も、3.4353または閉じる必要があります。

4

1 に答える 1

5

問題は、numpyfloat32がリトル エンディアンとして格納され、ビット文字列のデフォルトの実装がビッグエンディアンであることです。解決策は、データ型としてリトル エンディアンを指定することです。

my_file = open('float_test.bin', 'rb')
raw_data = ConstBitStream(my_file)
float_num_ = raw_data.readlist('floatle:32')

print float_num
print float_num_

出力:

3.4353
3.43530011177

ビット文字列データ型に関するリファレンスは、こちら.

于 2013-06-04T14:38:04.127 に答える