在c ++中将变量从配置文件分配给int16_t变量

时间:2017-10-21 16:31:49

标签: c++ stringstream istringstream

我使用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

这里可能出现什么问题?我无法理解这一点。

1 个答案:

答案 0 :(得分:1)

您的输入55555超出了int16_t的范围。由于int16_t是有符号数量,因此为符号保留一位,因此您的正范围较小。您正在溢出带符号的16位整数。

您的价值可能被解释为负数。

您可能需要输入较小的值或使用uint16_t