我有一个列表变量airMod
,由不同类型的数据组成: char,uint32和float 。以下是我在visual studio代码调试模式中的样子:
现在我想将它保存在二进制文件中(原始缓冲区。我将使用C ++逐字节处理它)。我想知道我应该怎么做。我搜索了它应该如何完成,但主要是保存包含相同数据类型的列表的解决方案(例如bytearray
,to_byte
.....)。
我想保存数据,然后用C ++(fseek, tellg, ifstream
等)进行处理。谢谢。
答案 0 :(得分:0)
使用内置的struct
模块,如下所述:https://docs.python.org/3/library/struct.html
您可以使用它将一组对象(通常是数字)序列化为字节。例如:
import struct
with open('outfile', 'wb') as out:
out.write(struct.pack('<if', 123, 456.789))
这将编写一个8字节的文件,可以使用这样的C或C ++结构进行解释,假设您使用的是像x86这样的小端机器:
struct MyRecord {
int32_t x;
float y;
};
在C或C ++中定义这样的结构时,必须注意字段的对齐,填充和字节顺序。如果您使用GCC或Clang并且可能包含未对齐字段,则__attribute__((packed))__
非常有用。
Python中的另一个选择是使用NumPy&#34;结构化数组&#34;。你可以创建一个这样的:
import numpy as np
rec = np.array([100, 456.789], [('x', 'i4'), ('y', 'f4')])
with open('outfile', 'wb') as out:
out.write(rec.tobytes())