如何正确填充缓冲区?

2024-09-30 10:42:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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,但我被卡住了。 如何编写这样的类型,如何只更改变量的字节顺序

附言:我没有被插座困住(嗯,我想)


Tags: 代码idjavascriptthis缓冲区鹦鹉sumoconstants
2条回答

最后,我使用struct模块将数据打包到一个缓冲区中,如下所示:(假设第二个arg需要格式化为little endian)

import struct

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

您可以使用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

相关问题 更多 >

    热门问题