代码之家  ›  专栏  ›  技术社区  ›  Eric

从字节构造结构化标量

  •  0
  • Eric  · 技术社区  · 6 年前

    最近,我发现自己在处理二进制数据时使用numpy数据类型代替了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 . 我能想到的一些选择是:

    1. data = np.array(buffer).view(dt)[()]
    2. data = np.ndarray(shape=(), buffer=buffer, dt=dt)[()]
    3. data = np.frombuffer(buffer, dtype=dt).squeeze(axis=-1)[()]

    1 回复  |  直到 6 年前
        1
  •  0
  •   Eric    6 年前

    data = np.void(buffer).view(dt) 具有所需的属性:

    • 返回一个标量
    • 投掷 ValueError: new type not compatible with array. 如果 len(buffer) != dtype.itemsize