Недавно я обнаружил, что вместо ctypes для обработки двоичных данных я использовал ntypty dtypes с чем-то вроде:
dt = np.dtype([
('header', np.uint16),
('points', ([
('x', np.int32),
('y', np.int32),
], (16,))),
])
buffer = file_like.read(dt.itemsize) # type: bytes
Для целей тестирования можно предположить, что
buffer = bytes(range(dt.itemsize))
Я изо всех сил пытался найти хороший эквивалент ctypes.from_buffer
. Вот некоторые варианты, которые я могу придумать:
data = np.array(buffer).view(dt)[()]
data = np.ndarray(shape=(), buffer=buffer, dt=dt)[()]
data = np.frombuffer(buffer, dtype=dt).squeeze(axis=-1)[()]
Все это кажется довольно запутанным - я скучаю по лучшему пути?