我知道网上有很多关于如何从字符串转换为十六进制的教程。好吧,我遇到了一个问题。
我的代码(见下文)最多可以包含31个字符,我无法为我的生活找出原因。只要有32个字符,它就会在7fffffff处达到最大值。
我需要输入类似“111111111100000000001010101000”的内容
应该是一个简单的修复,只是不确定在哪里
我的尝试(可编辑):
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int Base = 2;
long x;
char InputString[40];
char *pEnd = NULL; // Required for strtol()
cout << "Number? ";
cin >> InputString;
x = strtol(InputString, &pEnd, Base); // String to long
cout << hex << x << endl;
return 4;
}
答案 0 :(得分:1)
long
不能存储超过32位(实际上是31加一个符号位)。如果您想要超过32位,请尝试long long int
和strtoll()
;如果32就足够,请尝试unsigned long
和strtoul()
。
答案 1 :(得分:1)
这可能是因为机器上的长度是32位而{2}补码中的signed long
不能容纳32位。您可以尝试使用unisgned
(不会“浪费”一点符号)或long long
64位宽。
unsigned long x = strtoul(InputString, &pEnd, Base);
^^^^
或long long
:
long long x = strtoll(InputString, &pEnd, Base);
函数strtol
和strtoul
已在C ++中使用了很长时间。确实在{+ 1}中引入了strtoll
和long long
。