1、在发送端定义一个发送数据
a = 12;
2、与网络通信助手连接后,生成的hex值为:0C 00 00 00
3、接收端连接通信后,接收到这个值并把这个值从十六进制转为十进制;代码为:
temp = (unsigned char)buf[count + 3] << 24 | (unsigned char)buf[count + 2] << 16 | (unsigned char)buf[count + 1] << 8 | (unsigned char)buf[count + 0] << 0;
a = (int *)&temp;
4、运行程序 结果无误
/***************************************************/
但是如果发送端输出double类型的数据a=1.224455887,接收端按照上述代码编写,修改一个地方:a = *(double)&temp; 上面temp是十六进制转为十进制的解包形式,而double是8个字节,int是4个字节,如何修改temp的转码呢??
(把变量temp本身的地址强制类型转化成double型并取出指针的值)
运行程序,结果乱码,并没有生成double类型的数据。
这是为什么呢?该如何编写接收端的代码才能才能把双精度浮点型的数据转换成十进制数据?
请大佬们帮忙!感谢!欢迎交流!_
https://blog.csdn.net/hy119/article/details/50561738?utm_source=blogxgwz1
利用函数htonl和ntohl试一试看,将0C 00 00 00和00 00 00 0C互转;利用ntohd和htond转换double型变量