如果您想获得一个字节的高半字节和低半字节。换句话说,将 8 位拆分为 4 位。
考虑到数据字符串是十六进制的字节字符串,那么您可以简单地执行以下操作:
high, low = byte[:1], byte[1:2]
print(high, low)
哪个 forbyte = "16"
会打印1 6
. 然后,您可以使用int(high, 16)
andint(low, 16)
将其转换为小数。
如果您已经将十六进制转换为十进制,int(byte, 16)
那么您可以通过执行以下操作提取高半字节和低半字节:
high, low = byte >> 4, byte & 0x0F
print(hex(high), hex(low))
哪个 forbyte = 0x16
会打印0x1 0x6
,因为它们使用hex(x)
. 请注意,hex(x)
添加一个0x
前缀。您可以通过执行删除它hex(x)[2:]
。
因此,将您的数据字符串视为:
bytes = "10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50"
然后打印每个高半字节和低半字节可以通过以下方式完成:
bytes = "10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50"
bytes = bytes.split(",")
for byte in bytes:
byte = int(byte, 16)
high, low = byte >> 4, byte & 0x0F
print(hex(byte), hex(high), hex(low))
这产生了十六进制的字节,高半字节和低半字节。
此外,如果你有它的位("{0:08b}".format(byte)
),那么你可以像这样拆分它high, low = bits[:4], bits[4:8]
,现在high, low
每个都有它们的 4 位。