前提・実現したいこと
以前の質問に関連のある内容です。
numpy.float32型のデータを16進数のバイナリデータへ変換し、文字列としてファイル(save_1.txtとします)に保存しております。
その際、文字列へ変換せずバイナリデータのままファイル(save_2.txt)に保存することにしました。
保存するfloat32型のデータは np.array([0.0005268761, 0.0000000001, 0.003])
としています。
バイナリデータはリトルエンディアンで格納しています。
発生している問題・エラーメッセージ
save_1.txtの文字列と、save_2.txtのバイナリデータの値が合わないという問題が発生しました。
save1
10e1e0a3a 2ffe6db2e 3a69b443b
save2
10E 1E 0D 0A 3A 2FF E6 DB 2E 3A6 9B 44 3B
上記save2はバイナリエディタ上の表示に改行を加えております。
save2 1行目の3バイト目の位置に、0Dという値が入ってしまっているのが問題点です。
該当のソースコード
Python
1import os 2import argparse 3import sys 4import glob 5import numpy as np 6import struct 7import binascii 8 9data = np.array([0.0005268761, 0.0000000001, 0.003], dtype = np.float32) 10 11f1 = open("save_1.txt", mode = 'w') 12f2 = open("save_2.txt", mode = 'w') 13 14for i in data: 15 b = struct.pack('<f', i) 16 s = binascii.b2a_hex(b) 17 f1.write(s) 18 f1.write("\n") 19 20 f2.write(b) 21 continue 22 23f1.close() 24f2.close()
試したこと
- 0e1e0a3a (save1の1行目)
- 0E 1E 0D 0A (save2の1行目)
上記二つの値をこちらのサイトでそれぞれ確認しました。
結果として0.0005268761は0E 1E 0A 3A(save1)で表されることがわかっています。
補足情報(FW/ツールのバージョンなど)
Python2.7
Windows10 64bit
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/26 06:22