我有一些问题需要了解以下内容:
我将在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)
首先将您的数组声明为unsigned char
数组。 char
可以签名或取消签名,具体取决于实施情况,在您的情况下,您需要未签名的案例。
然后使用:
printf("%02hhx", array[i]);
如有必要,它会打印一个前导0
:
0002012F02
答案 1 :(得分:0)
当你循环时,客户端按照i
的顺序打印你的数组,这是你的内容在数组中的顺序(除非我误解了这个问题)。如果你问为什么它按照这个顺序打印它,那是因为它是你在数组中定义的顺序,并且一次增加数组索引一个值。
答案 2 :(得分:0)
客户端将按照您发送的确切顺序获取字节。这将是:
0x00
0x02
0x01
0x2F
0x02
使用新行(\ n)和ouah建议的%02x将更容易看到。现在还不清楚,因为所有的信息都是混在一起的。
printf("%02x\n", *(array+i));