C++解析IEEE754中float格式的数据
来源:互联网 发布:手机代理软件免费 编辑:程序博客网 时间:2024/05/18 00:52
#include<iostream>using namespace std;void FloatToBuf(float num, unsigned char buf[4]);float BufToFloat(unsigned char buf[4]);int main(){ float f = 639.5f; //待转换的浮点数 int *p = reinterpret_cast<int *>(&f); for(int i = 31; i >= 0; i--) //原始的二进制位 { cout << (*p >> i & 1); if(i % 8 == 0) { cout << ' '; } } cout << endl; unsigned char buf[4]; FloatToBuf(f, buf); for(i = 0; i < 32; i++) //转换后的大端模式二进制位 { cout << (buf[i / 8] >> (7 - i % 8) & 1); if(i % 8 == 7) { cout << ' '; } } cout << endl; cout << BufToFloat(buf) << endl; //再转回去的浮点数 return 0;}void FloatToBuf(float num, unsigned char buf[4]){ float item = 0.5f; int index = 0, i; if(num == 0.0f) { buf[0] = buf[1] = buf[2] = buf[3] = 0; return; } if(num > 0.0f) { buf[0] &= ~(1 << 7); } else { buf[0] |= (1 << 7); num *= -1.0f; } while(num >= 2.0f) { index++; num /= 2.0f; } num -= 1.0f; for(i = 9; i < 32; i++, item /= 2.0f) { if(num >= item) { buf[i / 8] |= (1 << (7 - i % 8)); num -= item; } else { buf[i / 8] &= ~(1 << (7 - i % 8)); } } if(num >= item) { for(i = 31; i > 8; i--) { if(buf[i / 8] >> (7 - i % 8) & 1) { buf[i / 8] &= ~(1 << (7 - i % 8)); } else { buf[i / 8] |= (1 << (7 - i % 8)); break; } } if(i == 8) { index++; } } index += 127; for(i = 8; i > 0; i--) { if(index >> (8 - i) & 1) { buf[i / 8] |= (1 << (7 - i % 8)); } else { buf[i / 8] &= ~(1 << (7 - i % 8)); } }}float BufToFloat(unsigned char buf[4]){ float sum = 1.0f, item = 0.5f; int index = 0, base = 1, i; for(i = 9; i < 32; i++, item /= 2.0f) { if(buf[i / 8] >> (7 - i % 8) & 1) { sum += item; } } for(i = 8; i > 0; i--, base *= 2) { if(buf[i / 8] >> (7 - i % 8) & 1) { index += base; } } if(index > 0) { index -= 127; if(index > 0) { while(index--) { sum *= 2.0f; } } else { index *= -1; while(index--) { sum /= 2.0f; } } } else { sum -= 1.0f; } if(buf[0] >> 7 & 1) { sum *= -1.0f; } return sum;}
0 0
- C++解析IEEE754中float格式的数据
- java中,IEEE754标准(四字节)的字节数据和浮点数之间的转化(Float and byte[])
- c语言中如何将以IEEE754标准显示的int型变量转换float型变量
- C语言实现 byte 转float IEEE754
- IEEE754 C++ float的内存布局.md
- IEEE754关于double格式定义的认识
- C/C++浮点数格式——IEEE754标准
- C/C++浮点数格式——IEEE754标准
- 浮点数在计算机中存储方式---IEEE754格式存储
- Qt中IEEE754格式转换为浮点数方法
- float型数据解析
- 浮点格式IEEE754详解
- 浮点数(32位)转换为IEEE754的格式
- IEEE754 浮点数格式 与 Javascript number 的特性
- IEEE754 浮点数格式 与 Javascript number 的特性
- WindowsPhone中XML和Json格式的数据解析
- JS中涉及到xml格式的数据解析方法
- iOS中解析json格式数据的各种方法调用
- codeblocks窗口还原
- visual studio 2010远程调试.NET代码实践
- Oracle闪回技术之一Oracle 11g 利用FlashTable (闪回表)恢复(用delete)误删的数据
- Sublime Text 2 VIM模式:Vintage插件的官方说明
- PyQT tutorial
- C++解析IEEE754中float格式的数据
- 2013华为工作之电信客服行
- 网站应用程式架构
- 三角形面积,三点顺序
- 为什么可穿戴设备会在此时兴起?- 物联其实可以从手机开始
- Windows下NTP时间服务器配置
- 数据库函数之sum
- WIN7下php在 IIS中的配置
- UBUNTU之安装软件