如何使用 C++ 将一串二进制数转换为带符号的十进制表示形式?

How do I convert a string of binary numbers to their signed decimal representation using C++?

我有一个字符串:

1010

字符串的无符号表示在执行后为 10:

string immediateValue = "1010";
char immediateChars[5];
strcpy(immediateChars, immediateValue.c_str());

char * ptr;
long parsedInteger = strtol(immediateChars, &ptr, 2);

据我了解,strtol 只能用于获取无符号表示。有没有办法得到 2 的补码值,即 -6?

这些数字是二进制字符串,您必须将它们转换为十进制。

讨厌。字符串可能太长而不能简单地打包成一个 long long,这使事情变得容易得多(将位推入 long long,然后调用 sprintf())。您将不得不编写自己的二进制除法例程,除以二进制十(“1010”)并取余数。那是你的最后一位数字。然后重复直到数字变为零。作为最后一步,反转 denary 数字以匹配左侧约定的最高有效数字。

这是一大堆代码,但作为学习练习是合理的。

检查你的第一个字符,如果是 0 则正常使用 n = strtol,如果是 1 则翻转位,例如“1010”到“0101”,然后取翻转字符串的strtol,该值的负数减一就是你的答案。