0

我有一个 32 位无符号整数的内存视图,我想将其解压缩为一些字符、整数和字符串(或必要时的字符数组)。

cdef const unsigned int[:] bin_file = np.fromfile(rom_fd, dtype='<u4')

此二进制文件的前 192 个字节用作包含有关文件其余部分的元数据的标头。

我想从 memoryview (或 memoryviewslice: bin_file[:48])中解压缩这些字节

从 memoryview 中获取 int 很容易:

cdef unsigned int first_int = bin_file[0]

但是,我不确定获取其他数据类型的最佳方法,尤其是那些跨越内存视图中多个条目的数据类型。

我希望能够使用类似于

cdef char[12] my_string = bin_file[40:43]

但这只是给出一个错误,说“无法将类型'const unsigned int [:]'分配给'char [12]'”。

4

1 回答 1

0

我认为最好的方法是使用 numpyndarray.view函数将数组视为另一种类型。您不会从 Cython 获得任何加速(因为您只是使用 numpy 函数),但我能想到的在 Cython 中执行此操作的大多数方法似乎都可能很快导致可能的灾难。

cdef char[::1] my_string = np.asarray(bin_file[40:43]).view(dtype=np.uint8)

请注意,我已经指定my_string和(未显示)使用语法bin_file是连续的。::1如果这不是真的,那么你试图将它们视为不同类型的记忆是行不通的。

于 2019-05-07T18:58:42.813 回答