Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;传递表示负值的十六进制时,stoll抛出超出范围异常_C++_Visual Studio 2013_Hex - Fatal编程技术网

C++ C++;传递表示负值的十六进制时,stoll抛出超出范围异常

C++ C++;传递表示负值的十六进制时,stoll抛出超出范围异常,c++,visual-studio-2013,hex,C++,Visual Studio 2013,Hex,我正在使用Visual Studio 2013,我正在尝试使用stoll将以十六进制格式编写的表示负值的字符串转换为long-long,但我得到了超出范围的异常。你知道为什么吗 e、 g.0xFFFFFFFFFA7E,即-1410十进制 示例代码: std::string s = "0xFFFFFFFFFFFFFA7E"; size_t pos; auto result = std::stoll(s, &pos, 16); 仅仅因为无符号算术(您甚至没有在这里使用)环绕并不意味着0xF

我正在使用Visual Studio 2013,我正在尝试使用stoll将以十六进制格式编写的表示负值的字符串转换为long-long,但我得到了超出范围的异常。你知道为什么吗

e、 g.0xFFFFFFFFFA7E,即-1410十进制

示例代码:

std::string s = "0xFFFFFFFFFFFFFA7E";
size_t pos;
auto result = std::stoll(s, &pos, 16);

仅仅因为无符号算术(您甚至没有在这里使用)环绕并不意味着0xFFFFFFFFFA7E是-1410十进制。不是

这是一个(非常大的)正数:根据我的计算,是18446744073709550000

无法由在有符号64位类型中工作的函数处理,因为有符号64位类型的最大值为9223372036854775807


由于
大小\u t
是一种无符号64位类型,您需要读取一个只适合无符号64位类型的值,因此请使用执行该操作的函数:。

因为无符号算术(您甚至没有在这里使用)环绕并不意味着0xFFFFFFFFFA7E是-1410十进制。不是

这是一个(非常大的)正数:根据我的计算,是18446744073709550000

无法由在有符号64位类型中工作的函数处理,因为有符号64位类型的最大值为9223372036854775807


由于
大小\u t
是一种无符号64位类型,您需要读取一个只适合无符号64位类型的值,因此请使用执行该操作的函数:。

自由是奴隶。所有权就是盗窃。自由就是奴隶。所有权就是盗窃。15是-1。谢谢你的回答,但老实说,我并不是什么都懂。对于64位长的数字,0xFFFFFFFFFA7E是-1410的两位补码。为什么这个stoll函数将其视为未签名的?如果我希望它是这样的,我会使用stoull函数。@KrzysztofKupka:“为什么这个stoll函数把它当作无符号的?”它没有。它将其视为已签名。这是一个有符号的正数。而且,签名时,它超出了范围,就像例外情况所说的那样。您需要将其视为无符号变量,以便它在范围内,您可以这样做,因为您将要将其放入无符号变量中。@KrzysztofKupka:“0xfffffffa7e在64位长的数字的两个补码中为-1410”这是一个错误陈述-0x582为-1410。0xFFFFFFFFFA7E是18446744073709550000。你把价值和表现混为一谈<代码>strtoll不读取位模式;它读数字。2的补码与此无关。谢谢你的回答,但老实说,我并不是什么都懂。对于64位长的数字,0xFFFFFFFFFA7E是-1410的两位补码。为什么这个stoll函数将其视为未签名的?如果我希望它是这样的,我会使用stoull函数。@KrzysztofKupka:“为什么这个stoll函数把它当作无符号的?”它没有。它将其视为已签名。这是一个有符号的正数。而且,签名时,它超出了范围,就像例外情况所说的那样。您需要将其视为无符号变量,以便它在范围内,您可以这样做,因为您将要将其放入无符号变量中。@KrzysztofKupka:“0xfffffffa7e在64位长的数字的两个补码中为-1410”这是一个错误陈述-0x582为-1410。0xFFFFFFFFFA7E是18446744073709550000。你把价值和表现混为一谈<代码>strtoll不读取位模式;它读数字。二的补语和它没有任何关系。