socket或者串口打印报文

在socket或者使用串口通信的时候,我们在打印报文信息的时候,遇到打印乱码的情况:

1、存储报文数组:

unsigned char send[100];

2、报文信息:

uint16_t  head = 0xAA01;

head = htons(head);

memcpy(send,&head,sizeof(uint16_t));

uint16_t  length = 0x1234;

length = htons(length);

memcpy(send+2,&length,sizeof(uint16_t));

3、打印报文

printf("%s",send); //错误打印方式,打印出来的是乱码,因为我们写入到报文的是十六进制数,读的时候也要以十六进制的形式读出每个字节。

for(int i =0;i<4;i++)    //正确打印方式

      printf("%02x ",send[i]);

4、总结

一定要记住:整型变量和字符型变量是不分家的,二者可以相互转换;

将写入的十六进制整型,以字符型打出,打印的是以该十六进制数为ASCII码的字符,所以,可能是乱码;

故,要将写入的十六进制数原样打印出来,需要使用%x(%02x含义:打印出来的十六进制数为两位,不足两位的左边补0);

猜你喜欢

转载自blog.csdn.net/modi000/article/details/112553919