我使用stringstream来解析配置文件。在从文本文件中分配值时,c ++整数变量工作正常。但是,当我将配置文件中的读取值分配给c ++ int16_t变量时,它只分配不同的值。我不知道发生了什么。
这是我的代码:
void parseConfigurationFile(){
//Variables
int16_t int16_tValue;
int firstIntegerValue;
//File parsing code
std::ifstream fin(configFileName);
std::string line;
std::istringstream sin;
while (std::getline(fin, line))
{
sin.str(line.substr(line.find(":")+1));
if (line.find("firstIntegerValue") != std::string::npos) {
sin >> firstIntegerValue;
}
else if (line.find("int16_tValue") != std::string::npos) {
sin>>int16_tValue;
}
}
我的配置文件如下所示:
firstIntegerValue : 12
int16_tValue : 55555
这里可能出现什么问题?我无法理解这一点。
答案 0 :(得分:1)
您的输入55555超出了int16_t
的范围。由于int16_t
是有符号数量,因此为符号保留一位,因此您的正范围较小。您正在溢出带符号的16位整数。
您的价值可能被解释为负数。
您可能需要输入较小的值或使用uint16_t
。