Question

Je lis les données d'un fichier binaire.J'ai un document qui me permet de savoir comment l'information est stockée.Pour être sûr de cela, j'utilise XVI32.

J'avais l'extraction de la chaîne d'informations et des données INT correctement, jusqu'à ce que je heurte un type de données de flotteur.

Selon ce fichier:

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

J'ai essayé de résoudre ceci avec:

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

et d'autres façons différentes ....

J'ai testé ces informations avec des outils en ligne tels que: http://babbage.cs.qc.cuny.edu/eeeee-754/index.xhtml et http://www.binaireconvert.com/result_float.html? décimal= 048046048054049046048054049048056055 , mais toutes ces voies me jette une valeur différente en fonction des résultats d'origine.

Je commence à soupçonner que les informations de flotteur sont cryptées ou quelque chose comme ça, mais pourquoi la chaîne et INT n'étaient pas cryptés?

Était-ce utile?

La solution

puzzle intéressant.Travailler avec la documentation que j'ai proposée:

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

Autres conseils

Mon patron m'a envoyé la réponse, les données de point flottant ne sont pas au format IEEE.

Le type de données est le point flottant TMS320

Pour une raison quelconque, les valeurs réelles des données hexagonales sont mélangées chaque 2 octets, je veux dire:

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

Merci pour soutenir les gars

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top