質問

バイナリファイルからデータを読んでいます。私は情報がどのように保存されるかを私に知らせる文書を持っています。これを確認するにはXVI32を使用しています。

私はフロートデータ型でぶつかったまで、情報文字列とintデータを正しく抽出していました。

このファイルによると:

00800000 = 0.0
7AFBDD35 = 0.061087
9BF7783C = -0.003491
00FBFCAD = 0.031416
.

私はこれを解決しようとしました:

struct.unpack('!f', my_float.decode('hex'))[0]
.

とその他の異なる方法....

この情報をいくつかのオンラインツールでテストしました。 http://babbags.cs.qc.cuny.edu/ieee - 754./index.xhtml http://www.binaryconvert.com/result_float。HTML?10進数= 048046054049048056055 。しかし、これらの方法はすべて元の結果に従って異なる値をスローします。

フロート情報が暗号化されているか、そのようなものが疑われることを容疑者ですが、文字列とINTが暗号化されていないのか?

役に立ちましたか?

解決

面白いパズル。私がこれを思いついた文書を扱う:

def byteswap(x):
    return ((x & 0x00ff00ff) << 8) | ((x & 0xff00ff00) >> 8)


def tms320_float(raw):
    s = (raw >> 23) & 1
    mantissa = (raw & 0x007fffff)
    exponent = raw >> 24
    if exponent >= 128:
        exponent -= 256
    if exponent == -128:
        return 0.0
    return (((-2) ** s) + float(mantissa) / float(1 << 23)) * (2.0 ** exponent)

>>> tms320_float(byteswap(0x00800000))
0.0
>>> tms320_float(byteswap(0x7AFBDD35))
0.06108652427792549
>>> tms320_float(byteswap(0x9BF7783C))
-0.003490658476948738
>>> tms320_float(byteswap(0x00FBFCAD))
0.031415924429893494
.

他のヒント

私の上司は私に答えを送った、浮動小数点データはIEEE形式ではありません。

データ型はTMS320フローティングポイント

です。

何らかの理由で、HEXデータからの実際の値は2バイトごとに混在しています。

80000000 = 0.0
FB7A35DD = 0.061087
F79B3C78 = -0.003491
FB00ADFC = 0.031416
.

サポート私にとって

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top