문제

이진 파일에서 데이터를 읽고 있습니다.정보가 저장되는 방법을 알려주는 문서가 있습니다.이를 확인하려면 XVI32를 사용합니다.

FLOAT 데이터 유형으로 범위가 부딪 힐 때까지 정보 문자열과 int 데이터를 올바르게 추출했습니다.

이 파일에 따르면 :

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

나는 이것을 해결하려고 시도했다 :

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

및 기타 다른 방법 ....

다음과 같은 온라인 도구 로이 정보를 테스트했습니다. http://babbage.cs.qc.cuny.edu/ieee-754./index.xhtml http://www.binaryconvert.com/result_float.html? decimal= 048046048054049048056049048056049048056055 그러나이 모든 방법은 원래 결과에 따라 다른 값을 던졌습니다.

FLOAT 정보가 암호화되었거나 그와 비슷하지만 문자열 및 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 부동 소수점

어떤 이유로, 16 진수 데이터의 실제 값은 2 바이트를 혼합하고, 제가 의미합니다 :

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

Support Me Guys

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top