【发布时间】:2022-01-04 21:20:07
【问题描述】:
我有一个 API 端点,它在用 C++ 编写的服务器上采用二进制结构。端点每秒必须接受数百个这样的结构,因此使用 JSON 或类似的东西有太多的开销。
结构看起来像这样:
struct TX {
int blockId;
char signature[64];
char signingKey[32];
time_t timestamp;
char nonce[8];
char to[25];
char from[25];
long amount;
long fee;
bool isTransactionFee;
};
我正在用 Python 编写一个客户端,它必须以上述格式提交数据。当我在 C++ 中对结构执行 sizeof 时,它给了我 200 个字节,各个字段 sizeof 的总和接近 182 个字节。
我不确定从哪里开始能够准确地序列化 python 中的结构——我是否假设结构的填充总是添加到末尾?我怎么知道两个字段之一之间没有填充?
我按照这些思路写了一些东西来开始并计划将数据复制到这些字节数组中:
txBinary = bytearray([0]*200)
blockId = bytearray([0]*4)
signature = bytearray([0]*64)
signingKey = bytearray([0]*32)
timestamp = bytearray([0]*8)
nonce = bytearray([0]*8)
toWallet = bytearray([0]*25)
fromWallet = bytearray([0]*25)
amount = bytearray([0]*8)
fee = bytearray([0]*8)
isFee = bytearray([0])
这是一个理智的方法吗?有没有其他更简单的方法可以在 Python 中序列化这样的数据结构?
【问题讨论】:
标签: python c++ serialization struct