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

2024-06-16 21:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Str0 = '04008020546c359986812644420e453113e209afeaaeeb316f3a07000000000000000000b8fa13b3fca087c1456daac626ab9b8a47eae821a326f17e0ffffc15433df709b0f718610b1812175a5c9544800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280'

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

我原以为这样行得通,但事实并非如此:

bytes_object = bytes.fromhex(Str0)

ascii_string = bytes_object.decode('ASCII')

引发的错误是:“ascii”编解码器无法解码位置2:序号不在范围(128)


Tags: 字符串信息string字节bytesobject错误ascii
2条回答

第一行: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字符

相关问题 更多 >