将字节转换为字符串会得到b'前缀

时间:2019-09-09 09:40:26

标签: python-3.x string

我正在尝试将旧的python2代码转换为python3,并且遇到stringsbytes的问题

在旧代码中,此行已执行:

'0x' + binascii.hexlify(bytes_reg1)

在python2中,binascii.hexlify(bytes_reg1)返回了string,但是在python3中,它返回了bytes,因此无法将其串联到"0x"

TypeError: can only concatenate str (not "bytes") to str

我尝试将其转换为字符串:

'0x' + str(binascii.hexlify(bytes_reg1))

但是我得到的结果是:

"0xb'23'"

应该是:

"0x23"

如何将字节转换为23而不是b'23',所以在连接“ 0x”时会得到正确的字符串?

2 个答案:

答案 0 :(得分:1)

您可以尝试这样做,让我知道它是否对您有用:

'0x' + str(binascii.hexlify(bytes_reg1)).decode("utf-8")
# or
'0x' + str(binascii.hexlify(bytes_reg1), encoding="utf-8")

注意-同样,如果您可以提供bytes_reg1的示例,则提供解决方案将更加容易。

答案 1 :(得分:0)

正如@Satya所说,解码是前进的方向。

您可以通过另一种方式访问​​十六进制字符串:

>>> import binascii
>>> import struct
>>> 
>>> some_bytes = struct.pack(">H", 12345)
>>> 
>>> h = binascii.hexlify(some_bytes)
>>> print(h)
b'3039'
>>> 
>>> a = h.decode('ascii')
>>> print(a)
3039
>>> 
>>> as_hex = hex(int(a, 16))
>>> print(as_hex)
0x3039
>>>