1

yaml ファイルから 16 進値を取得する際に問題が見つかりました。0x80000000 以上の 16 進値を取得できませんでした。以下はサンプル 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 から取得

OS : Ubuntu 9.10 i386

今、yaml-cpp の値を 16 進数で取得する必要がありますが、わかりません。別の方法で入手する方法を教えてください。

ありがとう、

4

1 に答える 1

5

signed int の最大値は事実上0x7FFFFFFFです。それが問題だと確信しています。

unsigned int正の数だけを取得する場合は、使用してみてください。または long long、符号付きと符号なしの両方の数値に使用します。

于 2010-03-22T16:30:02.917 に答える