【问题标题】:Writing 00 in hex char array在十六进制字符数组中写入 00
【发布时间】: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。为什么你认为它不起作用?

标签: c++ hex


【解决方案1】:

正如@MikeCAT 和@Remy Lebeau 所说:sprintf(char_array, "\xAA\xBB\xCC%c\xEE", '0'); 工作。 问题是,稍后在我的代码中我有一个 strlen(char_array) 返回:

6 代表 sprintf(char_array, "\xAA\xBB\xCC\xDD\xEE", 22);

4 代表sprintf(char_array, "\xAA\xBB\xCC%c\xEE", 0);

所以现在我将大小固定为 6。 感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2014-01-04
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多