Python:将十六进制值从大端转换为小端,然后转换为十进制

问题描述 投票:1回答:1

我正在读取文件并从文件中提取数据,因此能够获取ASCII数据和整数数据。

我正在尝试将8个字节的数据从Big Endian转换为Little Endian,然后转换为十进制值。

输入文件具有此数据

00 00 00 00 00 00 f0 3f

此值必须转换为0x3ff0000000000000,以便hex_to_double(0x3ff0000000000000)返回值1.0

我试图将上述值转换​​为小端和十进制的代码是

# Get the Scalar value
file.seek(0, 1)
byte = file.read(8)
hexadecimal = binascii.hexlify(byte)
hexaValue = byte.hex()
print(" hexadecimal 1 : %s"% struct.pack('<Q', int(hexadecimal, base=16)))


**# unable to convert the value to the int, so that it can be passed to **hex_to_double** function**

# wrote this function to convert the int value to decimal value
def hex_to_double(h):
    return struct.unpack('<d', struct.pack('<Q', h))[0]

任何建议都会有所帮助。

python hex
1个回答
0
投票

您的数据已经在base16中。因此,您应该先将其转换为二进制格式,然后再将其解压缩为十进制,如下所示:

>>> data = binascii.unhexlify(b'000000000000f03f')
>>> data
b'\x00\x00\x00\x00\x00\x00\xf0?'
>>> struct.unpack('<d', data)
(1.0,)
© www.soinside.com 2019 - 2024. All rights reserved.