如何正确填充缓冲区?

How to fill properly a buffer?

我正在与 python 的鹦鹉无人机(跳跃相扑)通信,我需要每 25 毫秒向他发送一个缓冲区以保持连接。问题,我不知道该怎么做^^

受此代码启发,写于javascript:https://github.com/forgeByAcision/node-sumo/blob/master/lib/sumo.js 我试着翻译一下:

var buf = new Buffer(7);

buf.writeUInt8(constants.ARCOMMANDS_ID_PROJECT_JUMPINGSUMO, 0);
buf.writeUInt8(constants.ARCOMMANDS_ID_JUMPINGSUMO_CLASS_PILOTING, 1);
buf.writeUInt16LE(constants.ARCOMMANDS_ID_JUMPINGSUMO_PILOTING_CMD_PCMD, 2);
buf.writeUInt8(this._pcmd.flag || 1, 4);
buf.writeInt8(this._pcmd.speed || 0, 5);
buf.writeInt8(this._pcmd.turn || 0, 6);

我听说过 struct library,但我被卡住了。 如何编写此类类型,如何仅更改变量的字节顺序?

PS:我没有被套接字卡住(好吧,我想)

您可以使用struct将您的数据打包到缓冲区中。类似于:

from struct import *
buf = ['[=10=]'] * 7

pack_into('BBHBbb', buf, 0, constants.ARCOMMANDS_ID_PROJECT_JUMPINGSUMO, constants.ARCOMMANDS_ID_JUMPINGSUMO_CLASS_PILOTING, constants.ARCOMMANDS_ID_JUMPINGSUMO_PILOTING_CMD_PCMD,...)

格式字符串还可以有一个指示字节顺序的初始字符。见 documentation.

最后我使用 struct module 将我的数据打包到缓冲区中,如下所示:

import struct

buf = struct.pack("BBHBbb", constant1, constant2, constant3, constant4 ....)