【发布时间】:2021-07-28 20:25:45
【问题描述】:
我必须以十六进制格式向某些设备发送命令。
我已成功发送带有"\xAA\xBB\xCC\xDD\xEE" 和"\xAA\xBB\xCC%c\xEE" 的十六进制命令,其中%c 包含某个十进制值。
但我无法发送00 值,例如"\xAA\xBB\xCC0x00\xEE"。
我已经看到很多关于此的主题,但没有适合我需要的解决方案。我尝试了不同的方法,例如:
sprintf(char_array, "\xAA\xBB\xCC%d%d\xEE", 0,0);
sprintf(char_array, "\xAA\xBB\xCC0x00\xEE");
但我找不到正确的解决方案。如果我理解正确,00 表示我的 char 数组的结尾,我需要执行转义序列将十六进制值插入到我的数组中。
总结:我可以发送任何十六进制命令,除非它们包含00。
【问题讨论】:
-
为什么不直接使用
%c呢?sprintf(char_array, "\xAA\xBB\xCC%c\xEE", 0); -
你知道你需要一个转义序列,然后使用它。 (字符串也以
'\0'结尾,所以sprintf()不能用于此):char data[] = "\xAA\xBB\xCC\x00\xEE"; memcpy(char_array, data, sizeof(data)); -
sprintf()返回格式化的字符数,因此发送命令会很有用。 -
你想要一个实际的零还是数字?如果你想要数字,
'0'不会终止任何字符串并且不会造成任何问题。如果你想要一个实际的零,%c或%d将无济于事,但char_array[3] = 0会。 -
@Bazziil %c with 0 works。为什么你认为它不起作用?