打印

4字节16进制数转换成十进制浮点数

[复制链接]
20018|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangzhenxky|  楼主 | 2013-8-21 16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
gx_huang| | 2013-8-21 16:44 | 只看该作者
44 1D 28 6B和628.6315有关系吗?
啥关系都不说,神仙也做不了。

使用特权

评论回复
板凳
coody| | 2013-8-21 16:56 | 只看该作者
强制转换

使用特权

评论回复
地板
wangzhenxky|  楼主 | 2013-8-21 17:14 | 只看该作者
gx_huang 发表于 2013-8-21 16:44
44 1D 28 6B和628.6315有关系吗?
啥关系都不说,神仙也做不了。

我是在传感器的规范上找的这个例子,应该就是4字节16进制数转成的10进制浮点数吧,我想知道怎么把4字节16进制数转成的10进制浮点数,程序怎么写?

使用特权

评论回复
5
wangzhenxky|  楼主 | 2013-8-21 17:14 | 只看该作者
coody 发表于 2013-8-21 16:56
强制转换

怎么转换?有函数?还是其他?

使用特权

评论回复
6
lxyppc| | 2013-8-21 17:18 | 只看该作者
union{
  float f;
  char  buf[4];
}data;
data.buf[0] = 0x6b;
data.buf[1] = 0x28;
data.buf[2] = 0x1D;
data.buf[3] = 0x44;

data.f;  // 这个data.f就是你要的628.6315

使用特权

评论回复
7
wangzhenxky|  楼主 | 2013-8-21 17:48 | 只看该作者
lxyppc 发表于 2013-8-21 17:18
union{
  float f;
  char  buf[4];

感谢,已经解决了!
unsigned char tempc[4]={0x6b,0x28,0x1d,0x44};
float tempf;
memcpy(&tempf,&tempc[0],4);

使用特权

评论回复
8
l289123557| | 2014-8-5 15:31 | 只看该作者
lxyppc 发表于 2013-8-21 17:18
union{
  float f;
  char  buf[4];

反过来,float类型数据怎么转换成4字节数据啊

使用特权

评论回复
9
ningling_21| | 2014-8-5 15:39 | 只看该作者
l289123557 发表于 2014-8-5 15:31
反过来,float类型数据怎么转换成4字节数据啊

只要有了浮点数 f,那么buf[4] 就是转换后的4字节数了....

使用特权

评论回复
10
ayb_ice| | 2014-8-5 15:42 | 只看该作者
l289123557 发表于 2014-8-5 15:31
反过来,float类型数据怎么转换成4字节数据啊

union{
  float f;                        // 628.6315
  char  buf[4];
}data;
//data.buf[0] = 0x6b;
//data.buf[1] = 0x28;
//data.buf[2] = 0x1D;
//data.buf[3] = 0x44;


        data.f = 628.6315;
        if(data.buf[0] != 0xfb){
                __error();
        }

使用特权

评论回复
11
李冬发| | 2014-8-6 14:07 | 只看该作者
大端小端问题得注意,最好用个自动识别的方式。

使用特权

评论回复
12
xlsf1048| | 2014-8-6 15:46 | 只看该作者
共用体

使用特权

评论回复
13
很忙| | 2014-8-7 09:43 | 只看该作者
玩的有点大,我目前还停留在玩整数的基础上。

使用特权

评论回复
14
longmaodo| | 2014-8-7 11:04 | 只看该作者
ayb_ice 发表于 2014-8-5 15:42
union{
  float f;                        // 628.6315
  char  buf[4];

请问  if(data.buf[0] != 0xfb){
                __error();
        }
这一句是什么意思呀

使用特权

评论回复
15
ayb_ice| | 2014-8-7 11:38 | 只看该作者
longmaodo 发表于 2014-8-7 11:04
请问  if(data.buf[0] != 0xfb){
                __error();
        }

示意代码,表示有错误了

使用特权

评论回复
16
longmaodo| | 2014-8-7 11:52 | 只看该作者
ayb_ice 发表于 2014-8-7 11:38
示意代码,表示有错误了

还是不太明白
这个应该是大端模式吧   
最高位 为什么不能是0XFB呢
刚才看了看FLOAT的储存规格  
没有看出来这个限制呀
大神 求解惑@ayb_ice

使用特权

评论回复
17
longmaodo| | 2014-8-7 11:54 | 只看该作者
为什么一定是0Xfb
上面写的有问题

使用特权

评论回复
18
ayb_ice| | 2014-8-7 11:54 | 只看该作者
longmaodo 发表于 2014-8-7 11:52
还是不太明白
这个应该是大端模式吧   
最高位 为什么不能是0XFB呢

0x6b吧,笔误

使用特权

评论回复
19
longmaodo| | 2014-8-7 11:59 | 只看该作者
ayb_ice 发表于 2014-8-7 11:54
0x6b吧,笔误

明白了 。。。。
谢谢

使用特权

评论回复
20
ayb_ice| | 2014-8-7 11:59 | 只看该作者
浮点数道理与正负数道理一样的

比如

char a = -1;

这个A等于负一,但如果强行当成无符号数就是0xff

同理浮点数628.6315,强行当成无符号数就是0x6b281d44

这里的强行是从内存的角度看的意思


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

1

粉丝