我正在尝试将旧的python2代码转换为python3,并且遇到strings
与bytes
的问题
在旧代码中,此行已执行:
'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”时会得到正确的字符串?
答案 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
>>>