如何使用 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
,该值的负数减一就是你的答案。
我有一个字符串:
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
,该值的负数减一就是你的答案。