我正在用python与鹦鹉无人机通信(跳跃相扑),我需要每25ms向他发送一个缓冲区以维持连接。问题,我不知道该怎么办^^
受此代码启发,以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库,但是被卡住了。 如何编写这样的类型,如何仅更改变量的字节顺序?
PS:我没有被插槽卡住(嗯,我想)
答案 0 :(得分:0)
您可以使用struct
将数据打包到缓冲区中。像这样:
from struct import *
buf = ['\0'] * 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。
答案 1 :(得分:0)
最后,我使用struct模块将数据打包到这样的缓冲区中:(假设第二个arg需要格式化为little-endian)
import struct
buf = struct.pack("BBHBbb", constant1, 255 - constant2, constant3, constant4 ....)