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

How to convert from a binary string of 32 characters to hex?

本文关键字:字符串 二进制 转换 十六进制 字符      更新时间:2023-10-16

我知道网上有大量关于如何从字符串转换为十六进制的教程。好吧,我对此有问题。

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

这可能是因为机器上的长是 32 位,而 signed long 不能在 2 的补码中容纳 32 位。您可以尝试使用unisgned(不会"浪费"一点符号)或 64 位宽的long long

unsigned long x = strtoul(InputString, &pEnd, Base);
                    ^^^^

long long

long long x = strtoll(InputString, &pEnd, Base);

strtolstrtoul的功能在C++中已经存在很长时间了。事实上,strtolllong long已经在C++11中引入。

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