将包含二进制的字符串转换为浮点数
Converting a string holding binary to float
我有一个字符串,其中包含一个二进制值,我想将其转换为浮点数。我找不到执行此操作的方法。
比如我有一个
string temp = "00000000000000000000000101111100";
用二进制表示0.25。
在 temp 上使用 stof
和 string::size_type
产生 1.0111110e+008 存储在浮点变量中(根据 visual studio)并打印该值导致垃圾 - 101111104.
我的问题:有没有办法直接将二进制字符串转换为浮点数,或者我需要计算浮点数然后存储它?
这是一种方式
std::string temp = "00000000000000000000000101111100";
assert(temp.length() == 32);
int n = 0;
for(int i = 0; i < temp.length(); ++i)
{
n |= (temp[i] - 48) << i;
}
float f = *(float *)&n;
不确定为什么要转换为 float,但可以使用 std::bitset
转换为 unsigned long
#include <bitset>
//...
std::string temp = "00000000000000000000000101111100";
std::bitset<33> n (temp);
unsigned long result = n.to_ulong();
当然,如果需要,您可以将 unsigned long 转换为 float。
我有一个字符串,其中包含一个二进制值,我想将其转换为浮点数。我找不到执行此操作的方法。
比如我有一个
string temp = "00000000000000000000000101111100";
用二进制表示0.25。
在 temp 上使用 stof
和 string::size_type
产生 1.0111110e+008 存储在浮点变量中(根据 visual studio)并打印该值导致垃圾 - 101111104.
我的问题:有没有办法直接将二进制字符串转换为浮点数,或者我需要计算浮点数然后存储它?
这是一种方式
std::string temp = "00000000000000000000000101111100";
assert(temp.length() == 32);
int n = 0;
for(int i = 0; i < temp.length(); ++i)
{
n |= (temp[i] - 48) << i;
}
float f = *(float *)&n;
不确定为什么要转换为 float,但可以使用 std::bitset
#include <bitset>
//...
std::string temp = "00000000000000000000000101111100";
std::bitset<33> n (temp);
unsigned long result = n.to_ulong();
当然,如果需要,您可以将 unsigned long 转换为 float。