Примерно так и должно быть:
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
, если строго по этому поводу?