在网络通信中,通常需要进行数据类型的转换,以提高效率。下面整合了一下我搜索和验证可行的转换代码,应对自己的VS开发环境做了些许更改。
1.把浮点数转为十六进制字符串
CString CByteArrayToCString(unsigned char * byteArray)
{
int len = 4;
CString strTmp,str;
str = "";
for(int i=0 ; i<len ; i++)
{
strTmp.Format(_T("%002X"),(*byteArray));
str += strTmp;
byteArray++;
}
return str;
}
void Float_To_HexStr(float f, CString& str,int byteOrder) { unsigned char byteArray[4]; //byteArray.SetSize(4); memcpy(&byteArray[0],&f,4);
//浮点数转为字节数组str = CByteArrayToCString(byteArray);}//字节数组转为十六进制字符串
2.字符串转浮点数
void HexStr_To_Float(unsigned char* a,float &f) { unsigned char byteArray2[4]; memcpy(&byteArray2[0],a,4); //a指向要转换的字符串,把字符串转为字节数组 f=ByteArrayToFloat(byteArray2);//字节数组再转为浮点数
}
float ByteArrayToFloat(unsigned char * byteArray) { float result=0; int x,s,e,m; void *pf; pf=&result; x=((*byteArray)<<24)+((*(byteArray+1))<<16)+((*(byteArray+2))<<8)+(*(byteArray+3)); /*for(unsigned char i=0;i<4;i++) { *((unsigned char *)pf+i)=*(byteArray+i); }*/ s = ( x >> 31 ) == 0 ? 1 : -1, e = ( x >> 23 ) & 0xff, m = ( e == 0 ) ? ( x & 0x7fffff ) << 1 : ( x & 0x7fffff ) | 0x800000; result= s * m * ( float ) pow( (float)2, (int)e - 150 ); return result; }
看到网上也有这样的方法用来把字节数组转为浮点数,但是我试了,好像不行,希望有知道的人告知:float floatVariable="0"; unsigned char i; void *pf; pf =&floatVariable; (unsigned char) * px = charArray; for(i=0;i<4;i++) { *(((unsigned char)*)pf+i)=*(px+i); }
这里有篇讲的方法更细的:http://blog.csdn.net/alan00000/article/details/14498367