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];}

运行结果



原创粉丝点击