我正在尝试将十六进制值转换为字符串,但我不断收到此错误
回溯(最近通话最近一次):文件
“ C:\ Users \ ASUS \ Desktop \ parse.py”,第14行,
data = bytes.fromhex(''.join(map(str,tup[4:4+length]))).decode("utf8")
UnicodeDecodeError:'utf-8'编解码器无法解码位置0:无效的起始字节中的字节0x91
我不太了解python,就像我第一次使用python3。这是代码:
import binascii
import struct
hex ="01 06 1C 02 5B 90 10 6F 01 03 3C 04 01 01 03 07 01 00 01 03 07 1E 01 01 09 05 15 00 00 04 54 52 2D 31 01 11 05 02 00 00 00 00 00 01 01 00 00 00 00 00 00 00 00 01 27 01 01 00 23 08 09 01 2A 41 73 64 23 31 23 31 23 30 23 31 30 30 30 23 30 23 30 2C 30 2C 30 23 30 23 23 30 23 23 23 30 01 04 05 16 00 28 01 03 05 0A 00 01 09 01 01 00 05 08 15 01 31 01 01 06 01 01 00 02 05 07 "
p1 = binascii.unhexlify(''.join(hex.split()))
print(p1)
print("\n\n")
tup = struct.unpack(str(len(p1))+'B', p1)
if tup[0] == 1:
# <= 0xFF
length = tup[1] - 2
C = tup[2]
CC = tup[3]
print("C: "+str(C)+", CC: "+str(CC)+" Size: "+str(length))
nHex = ''.join(map(str,tup[4:4+length]))
# code below is from another stackoverflow answer and can be replaced if you got a better one
data = bytes.fromhex(nHex).decode("utf8")
print("".join(chr(c) if chr(c) in string.printable else '.' for c in data))
解码十六进制后,我应该将时间戳记作为字符串。如何将nHex
转换为字符串?
答案 0 :(得分:0)
您收到此错误消息是因为0x91
或十进制的145
不是有效的ascii值。
您可以使用int(_, 16)
将十六进制字符串转换为其整数值,然后使用chr
将此整数转换为相应的 unicode 字符。
hex_ = "74 69 6d 65 73 74 61 6D 70"
s = ''.join([chr(int(x, 16)) for x in hex_.split()])
print(s)
timestamp
请注意,避免使用hex
作为变量,因为它会覆盖内置函数hex
。