如何将32个字符的二进制字符串转换为十六进制?

时间:2013-10-03 08:53:06

标签: c++ string hex strtol

我知道网上有很多关于如何从字符串转换为十六进制的教程。好吧,我遇到了一个问题。

我的代码(见下文)最多可以包含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;
}

2 个答案:

答案 0 :(得分:1)

long不能存储超过32位(实际上是31加一个符号位)。如果您想要超过32位,请尝试long long intstrtoll();如果32就足够,请尝试unsigned longstrtoul()

答案 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);

函数strtolstrtoul已在C ++中使用了很长时间。确实在{+ 1}中引入了strtolllong long