我有以下字符串:
std::string data{"4a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff000ff004a00f000f00e1887a9900fff000"}
我需要将其提取为等效的十六进制值:
4a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff004a00f000f00e1887a9900fff0000004ec00ff000ff004a00f000f00e00 0009>
当我执行以下代码时,它会打印 ffffffffffffffff 。
我发现问题在于值太大而无法修正 value ,但是我该如何克服呢?
有没有办法使用for循环将其逐个放入向量中?{
std::istringstream hex_buffer(data);
unsigned long long value;
hex_buffer >> std::hex >> value;
std::cout << value;
return 0;
}
答案 0 :(得分:1)
C ++语言使用固定大小的整数类型。基本集合包含(大小增加):char
,short
,int
,long
。 char
至少有8位,short
和int
至少有16位,long
至少有32位。
long long
是一个可选类型,存在时至少为64位。但是我不知道具有64位以上整数类型的体系结构,这意味着可以在unsigned long long
中表示的较大值是0xFFFFFFFFFFFFFFFFFF。
您当然可以定义一个能够处理整数值或任意大小的类,或者使用可以处理任意大小值(如gmp
)的库,因为您不能期望在一个存储区中存储超过64位的数字。 64位整数。