C/C++ float转换二进制
来源:互联网 发布:广州网络公关 编辑:程序博客网 时间:2024/06/11 05:12
昨天晚上朋友让帮忙写个程序,C++中将float转换成二进制流输出,刚开始一点点的转啊,哎,直接哭了。一晚上也没搞定。
回去查了点资料,又找同学商量了一下,找到个相对好的点的方法,验证了几个,结果是对的,但也不保证其他的也对,贴出来,大家交流一下
步骤:
1、首先取float的地址,强制转换成char*类型后赋值给一个char *的指针cp,然后对cp开始的四个字节按照char类型转换成二进制字符串。
2、转换结束之后,对计算机进行高低字节序判断,若是高字节序,则对得到的二进制字符串进行逆序。
==》这一步有问题,字节序判断后的调整不应该是对整个二进制字符串进行逆序,而是对四个字节进行顺序调整,在此谢谢 Azrael_cc 兄,代码直接调整了一下,没验证结果
代码:
#include <iostream>#include <string>using namespace std;string c2b(char *cp, int n);int isBigEndian();int main(){float fval = (float)4.25;char *cp = (char *)&fval;cout<<isBigEndian()<<endl;string ret;ret = c2b(cp, 4);if(!isBigEndian())//如果是高字节序,则将字符串逆序{for(int i = 3; i > 0; i--){for(int j = 0; j <8; j++)cout<<ret[8*i + j];}
return 0;}//此处的ret为处理结束后的结果cout<<ret<<endl;return 0;}/***@fun 将字符串转换成二进制流输出***/string c2b(char *cp, int n){string tmpStr = "";for(int i = 0; i < n; i++) {char ch = cp[i];char shift = ch >> 1;for(int j = 0; j < 8; j++){if(ch == (shift << 1))tmpStr += "0";else if(ch != (shift << 1))tmpStr += "1";ch = shift;shift = shift >> 1;} }return tmpStr;}/***@fun 判断计算机高低字节序***/int isBigEndian(){ unsigned short t = 1; unsigned char *m = (unsigned char*)&t; return m[1];}
运行结果
- C/C++ float转换二进制
- C语言二进制和float、int类型转换
- LoadRunner/C 二进制转换
- [C/C++]十-->二进制转换
- c/c++ 打印float的二进制表示
- C/C++ 关于float和double类型与二进制的转换实现。。
- float转换为二进制
- 图片二进制互相转换(C#)
- 将string转换成float(c#)
- C#float与double转换问题
- C语言强制类型转换 int ->float
- float 数据转换成 二进制
- C++_char/string 转换成 int/float char大小写转换
- C 字符串与二进制数组转换
- c语言:十进制转换为二进制
- C/C++实现十进制向二进制转换
- C语言版 字符串转换为二进制
- C语言实现二进制与十进制转换
- PHP Strict Standards:问题解决
- 类、方法、成员变量和局部变量的可用修饰符
- sockaddr , in_addr区别
- Linux系统下不同机器之间拷贝文件的方法
- AIX下查看某个端口的监听情况
- C/C++ float转换二进制
- C#WinForm最简单两DataGridView同步滚动
- 《飞秋下载》介绍过的求伯君,看看!
- Linux的系统安全设置Shell脚本
- 最近开发遇到一个传值和引用问题 记录一下
- 在EL中进行除法运算,结果不要小数的问题
- C++各大有名库的介绍
- li 列表 高度、间距问题
- 为什么程序员的工作效率和工资不成正比