在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);