我发现自己最近使用numpy dtype代替ctypes处理二进制数据,例如:
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)[()]
这些似乎都令人费解-我想念更好的方法了吗?
答案 0 :(得分:0)
data = np.void(buffer).view(dt)
具有所需的属性:
ValueError: new type not compatible with array.
会抛出len(buffer) != dtype.itemsize