Consider following code:
{
std::string input = "FFFFFFF";
int result = 0;
auto itBeg = input.cbegin();
auto itEnd = input.cend();
if(!bsq::parse(itBeg, itEnd, bsq::int_parser<int, 16>(), result) || itBeg != itEnd)
{
throw std::exception();
}
std::cout << input << " means " << result << std::endl;
}
{
std::string input = "FFFFFFFF";
int result = 0;
auto itBeg = input.cbegin();
auto itEnd = input.cend();
if(!bsq::parse(itBeg, itEnd, bsq::hex, result) || itBeg != itEnd)
{
throw std::exception();
}
std::cout << input << " means " << result << std::endl;
}
{
std::string input = "FFFFFFFF";
int result = 0;
auto itBeg = input.cbegin();
auto itEnd = input.cend();
if(!bsq::parse(itBeg, itEnd, bsq::int_parser<int, 16>(), result) || itBeg != itEnd)
{
throw std::exception();
}
std::cout << input << " means " << result << std::endl;
}
第一个解析器在0xFFFFFFF(注意,7个十六进制数字)上正常工作,
第二个解析器在0xFFFFFFFF(8个十六进制数字)上也能正常工作,
但第三个解析器失败了,我不明白为什么。难道int_parser<T, 16>
不是与bsq::hex基本相同吗?
在线演示请访问Coliru
static_cast<>
)。没有什么神奇的。这恰好就像c++中的简单赋值unsigned u = 0xFFFFFFFFF; int i = u;
甚至int i = 0xFFFFFFFF;
。 - sehe0xFFFFFFFF
不能被解释为-1并在第一时间由int_parser
解析。 我猜这是因为我们谈论的是值,而不是字节表示? - Lightness Races in Orbit