无效的标量十六进制值0x8000000及以上

1 c++ yaml-cpp

我发现从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";
  }
}
Run Code Online (Sandbox Code Playgroud)

hex.yaml

hex1: 0x7FFFFFFF
hex2: 0x80000000
Run Code Online (Sandbox Code Playgroud)

错误信息在这里.

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

环境

yaml-cpp:从svn获取,2010年3月22日或v0.2.5

操作系统:Ubuntu 9.10 i386

我现在需要在yaml-cpp上获得hex值,但我不知道.请告诉我如何以另一种方式获得它.

谢谢,

Anz*_*rio 5

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

unsigned int如果您只是获得正数,请尝试使用.或者同时使用 long long有符号和无符号数字.

  • @kioto,最好的说法是在这里点击复选标记来接受答案.:-) (2认同)