我正在向电机 Controller 发送命令十六进制代码,当我使用以下命令时,电机将按预期工作,但它不使用速度变量,而只是使用硬编码速度 0。
snprintf (command, 8, "\x88\x00"); //88 is direction and 00 is speed
现在从逻辑上讲我尝试
snprintf (command, 8, "\x88\x%02x", speed); //where speed is an int
这样,我使用\x 时出现错误,没有以下十六进制值。
然后我尝试仅使用常规 %02x 和 %x 来提高速度
snprintf (command, 8, "\x88%02x", speed);
这样我打印出了命令,并得到了\x88 的缓冲区符号,看起来像一个“?”,后面跟着一个 00。所以像..
?00
如何将带有速度和方向的完整十六进制缓冲区写入命令缓冲区以写入 Controller ?
非常感谢您的帮助
谢谢
最佳答案
%02x 格式化一个 int 参数,\x02 将文字字节 0x02 插入到字符串中
编辑:要将二进制命令发送到 Controller ,请使用\x02 语法嵌入 将命令添加到输出字符串中,或使用 %s 转换来嵌入二进制命令字符串 到输出字符串中。你可以说
char *cmd_turn_on = "\x01\x02";
sprintf(cmdbuf, "controller, do: %s", cmd_turn_on);
您可以使用 %c 将数字作为字节嵌入到字符串中
char *cmd_fmt = "%c%c";
sprintf(cmdbuf, cmd_fmt, 0x88, 0x02);
将两个字节“\x88\x02”放入cmdbuf
关于c - 在 C 中使用 %02x 与\x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216797/