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

时间:2017-02-25 02:38:11

标签: c++ string binary twos-complement

我有一个字符串:

1010

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

公害。字符串可能太长而不能简单地打包很长,这使得生活变得更容易(在长的时间内将位置推,然后调用sprintf())。您将要编写自己的二元除法例程,除以二进制十(" 1010")并取余数。那是你的最后一位数。然后重复,直到数字变为零。作为最后一步,反转否定数字以匹配左侧约定的最高有效数字。

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