Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将十六进制转换为字符串_Python_Python 3.x - Fatal编程技术网

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

在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

我正在尝试将十六进制值转换为字符串,但一直出现此错误

回溯(最近一次调用上次):文件

“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一样。代码如下:

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