16進数での"FFFFFED4"がintの最大値であるINT_MAXを越えてしまっているからです。
C++のstd::stoiは範囲に厳密です。数値として解釈した結果がINT_MIN〜INT_MAXの範囲外の場合は、エラーとなります。勝手に負の値にしてくれません。また、std::stolについてですが、VC++でのlongとintは同じ32bitですので(32bitと64bit両方とも)、同じく最大値を超えてしまいます。
もし、intな-300を得たいなら、std::stoulでunsigned longを取得して無理矢理キャストするしかないと思います。(std::stouiというのはないようです)
C++
1#include <iostream>
2#include <string>
3
4int main()
5{
6 int iData = static_cast<int>(std::stoul("FFFFFED4", nullptr, 16));
7 std::cout << iData << std::endl;
8 return 0;
9}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/22 12:49
2016/01/22 12:53