你好,当我使用binasci.a2b_hex时,出现了错误。没有错误消息,但返回值错误。这是数据和结果。
输入:FEB10AA86764FFFF输出:b'\xfe\xb1\n\xa8gd\xff\xff'
import binascii
ta['data'] = ta['data'].apply(binascii.a2b_hex)
n\xa8gd<-发生了什么事?我该怎么修?
我正在尝试在代码中使用各种十六进制值。大多数值(如fe、b1(都能很好地工作。
它实际上运行得很好。让您感到困惑的是作为字节串的输出。如果一个字节是有效的可打印字符,它将输出该字符,否则它将输出转义序列。
FE xfe
B1 xb1
0A n
A8 xa8
67 g
64 d
FF xff
FF xff
您看到的是Python;有益的";并且取ASCII范围中的任何字节,并且在向屏幕显示时显示ASCII字符而不是字节值。
有多种方法可以更改人类消费的值显示方式
$ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> data = bytes.fromhex('FEB10AA86764FFFF')
>>> data
b'xfexb1nxa8gdxffxff'
>>> print(data)
b'xfexb1nxa8gdxffxff'
>>> print(list(data))
[254, 177, 10, 168, 103, 100, 255, 255]
>>> for idx, x in enumerate(data):
... ascii_char = data[idx:idx+1].decode('ascii', 'ignore')
... print(f"data[{idx}] is denary={x:3d} or hex={x:#04x} or ascii={ascii_char}")
...
data[0] is denary=254 or hex=0xfe or ascii=
data[1] is denary=177 or hex=0xb1 or ascii=
data[2] is denary= 10 or hex=0x0a or ascii=
data[3] is denary=168 or hex=0xa8 or ascii=
data[4] is denary=103 or hex=0x67 or ascii=g
data[5] is denary=100 or hex=0x64 or ascii=d
data[6] is denary=255 or hex=0xff or ascii=
data[7] is denary=255 or hex=0xff or ascii=
>>> data.hex()
'feb10aa86764ffff'
您可以使用lambda来转换每个十六进制int
ta['data']=ta['ddata'].apply(lambda x:binascii.a2b_hex(x((