【发布时间】:2015-07-25 08:47:45
【问题描述】:
我在理解以下方面有一些问题:
我将在 C 中实现一个真正的小协议。协商服务器和客户端必须通过十六进制值交换信息。
当我回答来自客户端的请求时,我发送以下数组:
char array[] = { 0x00, 0x02, 0x01, 0x2F, 0x02 }
使用 sizeof(array) 计算的长度为 5。 出于调试目的,我对数组进行了 printf。
for( i = 0; i < length; i++ ){
printf("%x", *(array + i));
}
输出为 0212F2。客户如何知道哪些值属于一起? 还有更多的可能性,不是吗? 可能是 0x00、0x21、0x02、0x0F、0x02,但这是不正确的。
谁能解释一下?
非常感谢:)
弗洛里安
【问题讨论】:
-
你不只是用纯字节而不是十六进制字符串说话有什么原因吗?
-
您的输出正在打印“0”、“2”、“1”、“2F”和“2”。在我看来没问题 :) 如果您希望它打印“0x02”而不是“2”,请将格式说明符更改为“0x%02x”。
-
如果您想将此数据作为文本编码发送,您需要提供编码以了解如何在接收时重新组合它们。对于小于
0x10(16) 的任何内容,前导'0'字符并确保接收器在重新组装期间每八位字节提取两个字符可能对您有用。但无论如何,我都同意马蒂。只需发送带有长度序言的数组内容,就可以结束了。 -
顺便说一句:建议发送前缀和后缀
char与您类似“!0002012F02\n”的消息。 _Far_` 更容易处理短、长、迟或其他令人不安的消息。 -
我不确定您是要传输二进制值(将是 5 个字节)还是十六进制 ascii 字符串(将是 10 个字节,例如,0 变为二进制 0x3030)。你能澄清一下吗?