例如:
string binaryValue = "11111111111111111111111111111011" // -5
我需要将此字符串转换为此数字的十进制表示。
stoi(binaryValue, nullptr, 2)
将在这种情况下抛出异常。那么我怎样才能在c ++中做到这一点?字符串或int并不重要。
答案 0 :(得分:0)
因为您可能知道号码存储为Twos补充
使用简单的伪代码转换它
翻转数字0-> 1,1-gt; 0从左边写到util,你在字符串中找到最后1个,不要切换这个
这将是你的答案 0000000000000000000000000101 = 5
这是来自https://www.geeksforgeeks.org/efficient-method-2s-complement-binary-string/
的代码#include<bits/stdc++.h>
using namespace std;
string findTwoscomplement(string str)
{
int n = str.length();
// Traverse the string to get first '1' from
// the last of string
int i;
for (i = n ; i >= 0 ; i--)
if (str[i] == '1')
break;
// If there exists no '1' concat 1 at the
// starting of string
if (i == 0)
return '1' + str;
// Continue traversal after the position of
// first '1'
for (int k = i-1 ; k >= 0; k--)
{
//Just flip the values
if (str[k] == '1')
str[k] = '0';
else
str[k] = '1';
}
// return the modified string
return str;;
}
int main()
{
string str = "11111111111111111111111111111011";
cout << findTwoscomplement(str);
//now you convert it to decimal if you want
cout<<"Hello World";
cout << stoul( findTwoscomplement(str),nullptr,2);
return 0;
}