|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1、定义一个浮点型变量a=11.1234 作为发送端,它向接收端发送的是16进制代码 72 F9 31 41
2、在接收端编写程序
int temp;
int count = start + 0;
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 = (float)&temp;
把发送端与接收端通信连接后,接收端会输出a=11.1234
/***************************************************/
但是如果发送端发送一个双精度浮点型变量b=11.123456789作为发送端,它向接收端发送的是16进制代码C7 72 6E BA 35 3F 26 40
在接收端编写程序
int temp;
int count = start + 0;
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;
b = (double)&temp;
把发送端与接收端通信连接后,接收端会输出b=-9.25596e+061并没有输出想要的值
/**********************************************************/
/**********************************************************/
float四个字节 double八个字节
把接收端的代码修改成
temp =(unsigned char)buf[count + 7] << 56 | (unsigned char)buf[count + 6] << 48 |
(unsigned char)buf[count + 5] << 40 | (unsigned char)buf[count + 4] << 32 |
(unsigned char)buf[count + 3] << 24 | (unsigned char)buf[count + 2] << 16 |
(unsigned char)buf[count + 1] << 8 | (unsigned char)buf[count + 0] << 0;
还是不对
如何修改接收端的解码程序,可以输出一个双精度浮点数?
希望大佬们可以帮助,交流一下,关于我这个内容在网上找了好久也没有找到,修改的内容应该是temp的解码程序,希望大佬们能帮忙指点一下!!
你的temp是个什么类型?不会是int吧?int只有4字节,怎么存放八字节内容?buf是什么?char数组?char只有8位,怎么左移这么多位?昨天没有仔细看你的这些变量的类型。。。。
还是直接用联合体吧、直接看我写的那个例程,把多余的内容删掉就可以了
我帮你删除了一下,你可以根据自己需求,再改改
- #include <stdio.h>
- union Data{
- float a;
- char c[4];
- };
- union Num{
- double lf;
- unsigned char ch[8];
- };
- int main()
- {
- union Data aaa;
- char buf[4]={0x72, 0xF9, 0x31, 0x41};
- int i=0;
- printf("float类型的数据存储,占4个字节,正在读取四个字节……\n");
- for(i=0;i<4;i++)
- aaa.c[i]=buf[i];
- printf("float类型的数据存储,占4个字节。a=%f\n",aaa.a);
-
- union Num num;
- unsigned char buf1[8]={0xC7, 0x72, 0x6E, 0xBA, 0x35, 0x3F, 0x26, 0x40};
- printf("\ndouble类型的数据存储,占8个字节,正在读取八个字节……\n");
- for(i=0;i<8;i++)
- num.ch[i]=buf1[i];
- printf("double类型的数据存储,占8个字节,num=%lf\n",num.lf);
- return 0;
- }
复制代码
|
|