在python中将十六进制转换为字符串

时间:2018-09-05 18:03:12

标签: python python-3.x

我正在尝试将十六进制值转换为字符串,但我不断收到此错误

  

回溯(最近通话最近一次):文件

     

“ 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转换为字符串?

1 个答案:

答案 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