uint8小字节序到uint16大字节序

时间:2018-06-25 18:54:22

标签: python arrays endianness unsigned-integer unsigned-char

在Python2.7中,通过USB批量传输,我从相机获得了图像帧:

frame = dev.read(0x81, 0x2B6B0, 1000)

我知道一帧是342x260 = 88920像素的小尾数,因为我从批量传输中读取了2x88920 = 177840(0x2B6B0)。

如何将typecode = B的帧数组的内容转换为uint16大字节序数组?

1 个答案:

答案 0 :(得分:1)

类似这样的事情应该可以解决:

frame_short_swapped = array.array('H', ((j << 8) | i
                                        for (i,j)
                                        in zip(frame[::2], frame[1::2])))

它将来自frame的两个连续字节配对,并将其解压缩为ij。将j左移一个字节,并用or移至i,有效地交换字节(也就是2字节类型的字节序转换),并将其馈送到H类型的数组中。我对此感到有些不安,因为它应该对应于C short类型(根据文档),但是类型大小实际上只能保证最小长度。我想如果对此要求严格的话,您需要引入ctypes.c_uint16吗?