c++中16进制字符串转float的2种方法
菜鸟学习中遇到这样的情况:传感器发送过来的数据为4个16进制,接收到后保存为string类型。如收到16进制为
44556677
,则相应的string为
“DUfw”
,需要对string按照IEE754做转换变成
853.6010131835938
。学长提示用union转换。历经挫折,才写出来。
- 第一种利用union强制转换 。代码如下
string content = "DUfv";
float hexstrtoflo1()
{
union lhex
{
unsigned char d[4];
float f;
}fdata;
for (int i = 0; i < content.size(); i++)
{
fdata.d[i] = content[3-i];
}
return fdata.f;
}
fdata.f
即为所需的float数据。
- 利用c++11的特性:流操作
参考:conversion - ASCII hex to float in c++
string content = "DUfv";
float hexstrtoflo2()
{
string str;
for (int i = 0; i < content.size(); i++)
{
char c[9] = { 0 };
sprintf_s(c, "%02X", unsigned char(content[i]));
str += c;
}
cout << str << endl;
unsigned int x;
std::stringstream ss;
ss << std::hex << str;
ss >> x;
return reinterpret_cast<float&>(x);
}
推荐一个很好用的在线进制转换:在线进制转换-IEE754浮点数16进制转换