将十六进制字符串转换和打印为字节



我有一个Python字符串,包含一些十六进制信息(长度256)如下:

Str0 = '04008020546c359986812644420e453113e209afeaaeeb316f3a07000000000000000000b8fa13b3fca087c1456daac626ab9b8a47eae821a326f17e0ffffc15433df709b0f718610b1812175a5c9544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280'

这个字符串是十六进制,我们需要使用它创建一个字节字符串。然后为每一个新行打印一个字节(它的数值)。

我认为这将工作,但它没有:

bytes_object = bytes.fromhex(Str0)
ascii_string = bytes_object.decode('ASCII')
'ascii'编解码器无法解码位置2中的字节0x80:序数不在(128)范围内

第一行:bytes_object = bytes.fromhex(Str0)为您提供了一个字节类型,其功能为原始字节数据/字节数组。要打印每个字节的数值,你需要做的是:for x in bytes_object : print(x)如果你想要一个数值数组,可以使用[int(x) for x in bytes_object]

在十六进制中,每2个字符代表一个字节。因此,从十六进制字符串中,相应的字节将是:

0: 0x04 (decimal: 4)
1: 0x00 (decimal: 0)
2: 0x80 (decimal: 128)
3: 0x20 (decimal: 32)
... etc.

将此字符串转换为字节是可以的,因为字节可以是0 - 255之间的任何值。

问题是你试图将其解码为ASCII。如果您查看一个ASCII表,您将看到表中的最大值是127 (0x7F)。您试图解码的位置[2]的字节的十六进制值为0x80(十进制值为128),这不是一个有效的ASCII字符。

所以,问题是,你原来的十六进制字符串是从哪里来的,是什么让你认为它代表有效的ASCII字符?

最新更新