我有以下二进制文件(内容):
test = b'40000000111E0C09'
每两位是我想要的十六进制数字,因此以下内容比上面的内容更清楚:
test = b'40 00 00 00 11 1E 0C 09'
0x40 = 64 in decimal
0x00 = 0 in decimal
0x11 = 17 in decimal
0x1E = 30 in decimal
您明白了。
如何使用struct.unpack(fmt, binary)
获取值?我问有关struct.unpack()
的问题,因为它变得更加复杂...我那里有一个低字节的4字节整数...最后四个字节是:
b'11 1E 0C 09'
上面的十进制是多少,假设它是小端的?
非常感谢!这实际上是来自CAN总线,我正在以串行端口访问它(令人沮丧的事情。)
假设您有字符串b'40000000111E0C09'
,则可以使用带十六进制参数的codecs.decode()
将其解码为字节形式:
import struct
from codecs import decode
test = b'40000000111E0C09'
test_decoded = decode(test, 'hex') # from hex string to bytes
for i in test_decoded:
print('{:#04x} {}'.format(i, i))
打印:
0x40 64
0x00 0
0x00 0
0x00 0
0x11 17
0x1e 30
0x0c 12
0x09 9
要获得最后四个字节作为UINT32(小尾数),您可以执行(struct
docs)
struct
打印:
print( struct.unpack('<I', test_decoded[-4:]) )