通过C中的串行端口发送十六进制值

时间:2015-05-13 21:23:30

标签: c linux hex

我有一些问题需要了解以下内容:

我将在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,但这不正确。

有人可以解释一下吗?

非常感谢:)

弗洛里安

3 个答案:

答案 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));