无法将非常大的数字转换为十六进制

时间:2020-07-26 13:41:13

标签: c++ c++11

我有以下字符串: std::string data{"4a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff000ff004a00f000f00e1887a9900fff000"}

我需要将其提取为等效的十六进制值: 4a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff000ff004a00f000f00e00

当我执行以下代码时,它会打印 ffffffffffffffff 。 我发现问题在于值太大而无法修正 value ,但是我该如何克服呢? 有没有办法使用for循环将其逐个放入向量中?

{
    std::istringstream hex_buffer(data);

    unsigned long long value;

    hex_buffer >> std::hex >> value;

    std::cout << value;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

C ++语言使用固定大小的整数类型。基本集合包含(大小增加):charshortintlongchar至少有8位,shortint至少有16位,long至少有32位。

long long是一个可选类型,存在时至少为64位。但是我不知道具有64位以上整数类型的体系结构,这意味着可以在unsigned long long中表示的较大值是0xFFFFFFFFFFFFFFFFFF。

您当然可以定义一个能够处理整数值或任意大小的类,或者使用可以处理任意大小值(如gmp)的库,因为您不能期望在一个存储区中存储超过64位的数字。 64位整数。