为什么"?"字符出现在以下十六进制值? (我使用的是Python 3.5.1)
我的目标是将string
转换为十六进制值对。
string = b'3f8ccccd'
hexpairs = binascii.unhexlify(string)
我得到的hexpairs
的价值是:
b'?\x8c\xcc\xcd'
?
字符有什么意义?我原以为输出是:
b'\x3f\x8c\xcc\xcd'
答案 0 :(得分:2)
@Benedict回答是正确的,以下是一些可以帮助您理解的资料来源:
最初基于英文字母,ASCII编码128指定 字符分为七位整数,如ASCII图表所示 上述[8]。编码的字符是数字0到9,小写字母 a到z,大写字母A到Z,基本标点符号,控制 源自Teletype机器的代码和空间。对于 例如,小写j将变为二进制1101010和十进制106。 ASCII包括128个字符的定义:33个是非打印的 控制字符(很多现在已经过时)[9]影响文本和文字 空间被处理[10]和95个可打印的字符,包括 空间
对于?
字符:
chr(0b00111111)
将输出?
chr(0o77)
中输出?
chr(63)
中输出?
chr(0x3f)
中将输出?
如您所见,您可以在0b
之前使用0o
,0x
或int
之类的前缀,以使python了解您不使用十进制数字。
但是0x8C
不在ascii表中(因为它从0到127)。 0x8C
为十进制140,无法显示等效值。
答案 1 :(得分:1)
?由于unhexlify使用3F作为字节代码,这是“?”的ASCII代码。因此,Python将这些字节显示为ASCII码。
答案 2 :(得分:-1)
这个问题可以通过以下方式解决。
hexastring = r'\xc3\xb9asdfsadf\xc3\xa9 asdfsdfsdf \xc3\x80 sdfsdfsdfdsf \xc3\xba'
hexaValueList = re.findall(r'((?:\\x[a-f\d]{2})+)',hexastring)
for hexaValue in hexaValueList:
beforeReplace = hexaValue
xReplace = re.sub(r'\\x','',hexaValue)
hex2String = bytearray.fromhex(xReplace).decode()
hexastring = re.sub(re.escape(beforeReplace),hex2String,hexastring)
print (hexastring)
回答
ùasdfsadféasdfsdfsdfÀsdfsdfsdfdsfú