c - 在 C 中使用 %02x 与\x

标签 c hex

我正在向电机 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/

相关文章:

c++ - 在 SSE 寄存器中存储常量(GCC、C++)

Win 7 64位机可以安装C吗?

sql - SELECT hex(name || age) AS X FROM Ages ORDER BY X

c++ - 将十六进制字节发送到串行端口

hex - 使用十六进制可以创建哪些英语单词?

c - GCC:为什么常量变量没有放在 .rodata 中

c - 具有巨大数字的基本数学运算

c - 使用条件变量的简单多线程堆栈实现

c++ - 在 C++ 中将十六进制转换为字节

ios - 汉字转ASCII或十六进制