【发布时间】:2016-02-06 15:29:20
【问题描述】:
我需要通过串行通信将值 115200 作为参数发送到外部设备,该设备需要将参数作为字节数组的一部分,格式为:0x00, 0x00, 0x00, 0x00,但我不知道如何转换它成那种格式。
我在 Processing 中执行此操作,因此 Processing/java 解决方案将来会派上用场,但 ATM 如果我可以发送带有此特定变量的消息,我将非常高兴。
这是字节数组:
byte[] tx_cmd = { 0x55, -86, // packet header (-86 == 0xAA)
0x01, 0x00, // device ID
0x00, 0x00, 0x00, 0x00, // input parameter NEEDS TO BE 115200
0x04, 0x00, // command code
0x00, 0x01 }; // checksum
参数需要放在第5到第8位(byte[4] - byte[7])。
消息格式为little endian 这是消息结构:
0 0x55 BYTE 命令起始码1
1 0xAA BYTE 命令起始码2
2 Device ID WORD 设备ID:默认为0x0001,始终固定
4 参数 DWORD 输入参数
8 命令字 命令码
10 校验和 WORD 校验和(字节加法) OFFSET[0]+…+OFFSET[9]=校验和
任何建议将不胜感激。 谢谢
【问题讨论】:
-
您的问题是如何将
int转换为 sizeof(int) 大小的字节数组?或者是 115200 的值? -
明确说明预期的字节序 - 115200 的最低或最高有效字节是否进入字节 [4]? (消息显示为小端)。你知道如何计算校验和吗?如果没有,使用什么算法以及它是如何应用在这里的?也许这个协议/格式有名字??
-
@HannesAndersson :你说过你控制的设备是小端的。现在的问题是 - 进行控制的设备的字节序是什么?如果它显然是大端,你必须交换字节(如提供的解决方案所示)如果进行控制的设备是小端架构,并且被控制的设备需要小端值,那么你不必做字节交换。
-
请在交叉帖子之间链接:forum.processing.org/two/discussion/13411/…
标签: java c type-conversion bytearray processing