1

我发现从 yaml 文件中获取十六进制值的问题。它无法获得 0x80000000 及以上的十六进制值。以下是一个示例 C++ 程序。

// ymlparser.cpp
#include <iostream>
#include <fstream>
#include "yaml-cpp/yaml.h"

int main(void)
{
  try {
    std::ifstream fin("hex.yaml");
    YAML::Parser parser(fin);
    YAML::Node doc;
    parser.GetNextDocument(doc);

    int num1;
    doc["hex1"] >> num1;
    printf("num1 = 0x%x\n", num1);

    int num2;
    doc["hex2"] >> num2;
    printf("num2 = 0x%x\n", num2);
    return 0;
  } catch(YAML::ParserException& e) {
    std::cout << e.what() << "\n";
  }
}

hex.yaml

hex1: 0x7FFFFFFF
hex2: 0x80000000

错误信息在这里。

$ ./ymlparser 
num1 = 0x7fffffff
terminate called after throwing an instance of 'YAML::InvalidScalar'
  what():  yaml-cpp: error at line 2, column 7: invalid scalar
Aborted

环境

yaml-cpp : 从 svn, March.22.2010 或 v0.2.5 获取

操作系统:Ubuntu 9.10 i386

我现在需要在 yaml-cpp 上获取十六进制值,但我不知道。请告诉我如何以另一种方式获得它。

谢谢,

4

1 回答 1

5

有符号整数的最大值是有效的0x7FFFFFFF。我很确定这是问题所在。

unsigned int如果您只想获得正数,请尝试使用。或 long long用于有符号和无符号数字。

于 2010-03-22T16:30:02.917 回答