如何解压缩Cython memoryview

时间:2019-05-05 02:42:46

标签: python cython binaryfiles memoryview

我有一个32位无符号整数的内存视图,我想将其解压缩为一些char,int和字符串(如有必要,也可以分解为char数组)。

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

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

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

从memoryview中获取一个整数很容易:

cdef unsigned int first_int = bin_file[0]

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

我希望能够使用类似

的东西
cdef char[12] my_string = bin_file[40:43]

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

1 个答案:

答案 0 :(得分:0)

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

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

请注意,我已使用my_string语法指定bin_file::1(未显示)是连续的。如果不是这样,那么您尝试将它们视为另一种类型的内存的尝试将无法正常工作。