【问题标题】:converting bytes to string gives b' prefix将字节转换为字符串给出 b' 前缀
【发布时间】:2019-09-09 09:40:26
【问题描述】:

我正在尝试将旧的 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' 时得到正确的字符串?

【问题讨论】:

  • 嗨——这里的bytes_reg1 是什么?
  • 这是bytes_reg1 = struct.pack(">H", reg1)的结果

标签: python-3.x string


【解决方案1】:

您可以尝试这样做并告诉我它是否适合您:

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

注意-如果你能提供bytes_reg1的样本,提供解决方案会更容易。

【讨论】:

    【解决方案2】:

    正如@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
    >>> 
    
    

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多