【问题标题】:Get rid of trailing \x00 on a bytearray摆脱字节数组上的尾随 \x00
【发布时间】:2020-04-24 02:47:03
【问题描述】:

我正在尝试将矩阵从发射器串行传输到接收器。为此,我试图读取矩阵的每一行,将其转换为字节数组进行传输,然后在接收器中对其进行解码。到目前为止,当我将每一行转换为字节数组时,每个数字都会被空元素尾随。

a = np.random.randint(0,255,size=(20,20))
print(a)


for row in a:
    b = bytearray(row)
    print(b)

假设行中的数组是 [1,2,3,4]

预期结果: bytearray(b'\x01\x02\x03\x04')

但我得到的结果是: bytearray(b'\x01\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00...')

我的接收器使用 list() 来解码消息,因此具有 [1,2,3,4] 的数组将变为 [1,0,0,0,2,0,0,0,3,0,0 ,0,4,0,0,0] 到接收器。

【问题讨论】:

    标签: python arrays numpy matrix


    【解决方案1】:

    来自the documentation

    dtype:dtype,可选

    结果的所需数据类型。所有 dtype 都由它们的名称确定,即“int64”、“int”等,因此字节顺序不可用,并且特定精度可能具有不同的 C 类型,具体取决于平台。默认值为“np.int”。

    1.11.0 版中的新功能。

    dtypedata type的缩写,是大量Numpy函数的参数。)

    除非您另外指定,否则np.random.randint 会为您提供np.int 大小的值,它占用四个字节的空间。 (对于您指定的随机范围,单个字节就足够了并不重要。)

    要解决此问题,请指定 appropriate dtype:

    a = np.random.randint(0, 255, size=(20,20), dtype=np.uint8)
    

    【讨论】:

      【解决方案2】:

      看起来你有一个整数数组“a”,每个整数实际上存储在 4 个字节中——因为整数可以保存比 255 大得多的值,无符号字节保存的最大值.因此,您关心的每个值之间的那些 3 个零的集合是“整数的其余部分”。

      我不记得 np.random 是否提供了一种将其初始化为字节数组的方法。或者您可以有一个中间步骤,在传输之前将“行”中的每 4 个字节复制到一个新的字节数组“c”中。

      无论如何,希望这至少可以为您指明正确的方向。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-17
        • 2014-02-06
        • 2013-01-08
        • 2019-03-17
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多