在python中将十六进制转换为字符串
我正在尝试将十六进制值转换为字符串,但一直出现此错误 回溯(最近一次调用上次):文件 “C:\Users\ASUS\Desktop\parse.py”,第14行,在在python中将十六进制转换为字符串,python,python-3.x,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不太了解,这就像我第一次使用python 3一样。代码如下: im
data = bytes.fromhex(''.join(map(str,tup[4:4+length]))).decode("utf8")
UnicodeDecodeError:“utf-8”编解码器无法解码位置0中的字节0x91:无效的开始字节
我对python不太了解,这就像我第一次使用python 3一样。代码如下:
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))
导入binascii
导入结构
六角形="01 06 1C 02 5B 90 10 6F 01 03 3C 04 01 01 03 07 01 01 09 05 15 00 04 54 2D 31 01 11 05 02 00 00 00 00 00 00 00 00 00 00 01 27 01 00 00 23 08 09 01 2A 41 73 64 23 31 23 31 23 30 30 23 30 30 23 23 30 2C 30 23 23 23 23 23 30 30 30 30 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 03 01 01 01 01 23 23 23 23 01 01 0101 06 01 01 00 02 05 07 "
p1=binascii.unexlify(“”.join(hex.split()))
打印(p1)
打印(“\n\n”)
tup=str.unpack(str(len(p1))+'B',p1)
如果tup[0]==1:
#出现此错误是因为十进制的0x91
或145
不是有效的ascii值
您可以使用int(\u16)
将十六进制字符串转换为其整数值,然后使用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)
输出
作为旁注,避免使用hex
作为变量,因为它会覆盖内置函数hex
使用System.currentTimeMillis()创建的时间戳上的确切预期输出是什么?@OlivierMelanç/1000
在Java中,您有一个print语句。它应该从给定的输入中输出什么。向我们显示确切的字符串。@OlivierMelançon我真的不知道确切的字符串,但我非常确定nHex包含一个时间戳,就像它打印的1536170968
一样,这是nHex
包含的还是unicode错误我很确定这是一个时间戳。一个更可读的代码:bytearray.fromhex(hex).decode()
。适用于python 2和3@party34正如我所说的,如果您没有显示预期的输出,我将无法帮助您。您是如何准确获取字符串的?@OlivierMelançon我使用WPE PRO获取它的,同时尝试查看我的服务器到底向客户端发送了什么。@LakshayGarg这在问题中也抛出了相同的错误
timestamp