我有一个32位无符号整数的内存视图,我想将它们解压到一些字符、整数和字符串中(如果需要,也可以解压缩为字符数组)。
cdef const unsigned int[:] bin_file = np.fromfile(rom_fd, dtype='<u4')此二进制文件的前192个字节用作标头,其中包含有关文件其余部分的元数据。
我想从内存视图(或内存视图切片:bin_file[:48])中解压这些字节。
从内存视图中获取一个int很容易:
cdef unsigned int first_int = bin_file[0]但是,我不确定获取其他数据类型的最佳方法,特别是那些在内存视图中跨越多个条目的数据类型。
我希望能够使用类似于
cdef char[12] my_string = bin_file[40:43]但这只会给出一个错误:“无法将类型'const unsigned int‘赋值给'char 12'”。
发布于 2019-05-08 02:58:43
我认为最好的方法是使用numpy ndarray.view函数将数组视为另一种类型。你不会从Cython中获得任何加速(因为你只是使用numpy函数),但是我能想到的在Cython中做这件事的大多数方法似乎很快就会导致灾难。
cdef char[::1] my_string = np.asarray(bin_file[40:43]).view(dtype=np.uint8)注意,我已经使用::1语法指定了my_string和bin_file (未显示)是连续的。如果这不是真的,那么你试图将它们视为不同类型的内存是行不通的。
https://stackoverflow.com/questions/55988402
复制相似问题