【问题标题】:'bytes' object cannot be interpreted as an integer“字节”对象不能解释为整数
【发布时间】:2021-09-22 06:08:21
【问题描述】:

我有一个代码片段,它从套接字读取并将所有字节附加到一个数组中(这应该是它的工作方式)但是当我执行下面的代码时:

def receiveData:
     bytemessage = bytearray()
     while True:             
           b = s.recv(1)
           logger.info(str(b))    
           bytemessage.append(b)

我在 'bytemessage.append(b)' 所在的行收到此错误

'bytes' 对象不能解释为整数示例

我可以记录我从套接字读取的所有字节,所有这些字节都是这样的字节格式b'\x01' 有没有人提出解决方案?

【问题讨论】:

  • 将与本文重复。 Python bytes concatenation
  • 顺便说一句,您需要检查您是否真的收到了 1 个字节。 Socket.recv 连接关闭时返回 0 字节。

标签: python python-3.x


【解决方案1】:

根据文档,bytearray 是 0 您只能附加该范围内的整数。 bytes 对象是同一范围内的不可变整数数组。所以你可以做

bytemessage.append(b[0])

但你也可以扩展bytearray,如果你有一个超过一个字节的bytes对象,这很方便。这也有效

bytemessage.extend(b)

这将比创建字节对象列表并在最后组合它们更节省空间。就个人而言,即使只添加一个字节,我也会扩展,因为我认为语法不那么混乱。

【讨论】:

    【解决方案2】:

    来自docs

    bytearray 类是 0

    它并不意味着是通用字节对象的容器。

    您可以将所有部分添加到常规列表中,然后将它们全部连接在一起

    def receiveData():
        parts = []
        while True:             
            b = s.recv(1)
            logger.info(str(b))    
            parts.append(b)
        return b''.join(parts)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2018-03-19
      • 2018-01-19
      • 1970-01-01
      • 2017-08-01
      • 2018-05-15
      • 2021-07-30
      相关资源
      最近更新 更多