【问题标题】:How to convert a single byte from a bytearray to singed int如何将单个字节从 bytearray 转换为 singed int
【发布时间】:2022-10-07 19:04:18
【问题描述】:

我有一个字节数组,它由 4 个字节组成,其中每个字节代表 -128..127 范围内的一个单字节。如何转换这个?

表示值的字节数组:-1、15、1 和 -2 由以下方式创建:

data = bytearray()
data.extend([0xff, 0x0f, 0x01, 0xfe])

现在我尝试用这段代码转换它:

import struct
my_signed_byte = struct.unpack(\"b\", data[0])[0]

这会引发错误:

TypeError:需要一个类似字节的对象,而不是 \'int\'

发生这种情况,因为数据[0]确实返回一个 int 和不是字节数组.

  • 但是如果你有 4 个字节,你可以使用struct.unpack(\"bbbb\", data)
  • 目前尚不清楚您要在这里做什么。如果data[0] 已经是一个int,为什么还要使用struct.unpack?你的问题说你想转换它一个int,但错误说你已经有了一个。
  • @kaya3 因为data[0] 是错误的整数。
  • 如果问题只是如何将 int 放入 -128 到 127 的范围内,您可以编写 x if x <= 127 else x - 256

标签: python


【解决方案1】:

https://docs.python.org/3/library/stdtypes.html?highlight=bytearray#bytearray

由于 bytearray 对象是整数序列(类似于列表), 对于字节数组对象 b,b[0] 将是一个整数,而 b[0:1] 将 是长度为 1 的 bytearray 对象。(这与文本字符串形成对比, 其中索引和切片都会产生长度为 1 的字符串)

my_signed_byte = struct.unpack("b", data[0:1])[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2016-03-04
    • 2016-02-20
    相关资源
    最近更新 更多