在C中使用%02x vs \ x

时间:2014-11-30 18:43:18

标签: c hex

我正在向电机控制器发送命令十六进制代码,当我使用以下内容时,电机将按预期工作,但它不是使用速度变量而只是硬编码速度为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

如何将带有速度和方向的完整十六进制缓冲区写入命令缓冲区以写入控制器?

我很感激帮助

谢谢

1 个答案:

答案 0 :(得分:4)

%02x格式化一个int参数,\ x02将一个文字字节0x02插入字符串

编辑:要将二进制命令发送到控制器,请使用\ 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