C/C++ 关于float和double类型与二进制的转换实现。。

来源:互联网 发布:苍穹剑诀坐骑进阶数据 编辑:程序博客网 时间:2024/06/11 01:30



void FloatToString(float fNum,char *pStr){unsigned int nData = ((unsigned int *)&fNum)[0];for (int i = 0;i < 32;i ++){pStr[31 - i] = (char)(nData & 1) + '0';nData >>= 1;}pStr[32] = '\0';}void DoubleToString(double dNum,char *pStr){UINT64 nData = ((UINT64 *)&dNum)[0];for (int i = 0;i < 64;i ++){pStr[63 - i] = (char)(nData & 1) + '0';nData >>= 1;}pStr[64] = '\0';}



float StringToFloat(char *pStr){unsigned int nData = 0;float *pData;for (int i = 0;i < 31;i ++){nData += (pStr[i] - '0');nData <<= 1;}nData += (pStr[31] - '0');pData = (float *)&nData;return *pData;}double StringToDouble(char *pStr){UINT64 nData = 0;double *pData;for (int i = 0;i < 63;i ++){nData += (pStr[i] - '0');nData <<= 1;}nData += (pStr[63] - '0');pData = (double *)&nData;return *pData;}


void PrintfBinary(unsigned char cData){for (int i = 7;i >= 0;i --){if (cData & (1 << i)){cout << "1";} else{cout << "0";}}}float fNum = 7.5;unsigned char *pChar = reinterpret_cast<unsigned char *>(&fNum);for(int i = sizeof(float) - 1; i >= 0; --i){PrintfBinary(pChar[i]);}

以上是简单验证和实现的例子。。



1 0
原创粉丝点击