uint8 массив с прямым порядком байтов в uint16 с прямым порядком байтов - PullRequest
0 голосов
/ 25 июня 2018

В Python2.7 из массовой передачи через USB я получаю кадр изображения с камеры:

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

Я знаю, что один кадр 342x260 = 88920 пикселей с прямым порядком байтов, потому что я читаю 2x88920 =177840 (0x2B6B0) из массовой передачи.

Как преобразовать содержимое массива фреймов typecode = B в массив с байтовым порядком байтов uint16?

1 Ответ

0 голосов
/ 26 июня 2018

Примерно так и должно быть:

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

Он соединяет два последовательных байта из frame и распаковывает эти пары в i и j.Сдвиньте j на один байт влево и or с i, эффективно поменяйте местами байты (иначе говоря, преобразование порядка байтов для 2-байтового типа) и передайте их в массив типа H.Я немного обеспокоен этим битом, так как он должен соответствовать типу C short (согласно документам), но размеры шрифтов действительно гарантируют только минимальную длину.Я думаю, вам нужно ввести ctypes.c_uint16, если строго по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...