我有一个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]'”。
答案 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
(未显示)是连续的。如果不是这样,那么您尝试将它们视为另一种类型的内存的尝试将无法正常工作。