2010-03-22 4 views
1

J'ai trouvé un problème lors de l'obtention de la valeur hexadécimale du fichier yaml. Il n'a pas pu obtenir la valeur hexadécimale 0x80000000 et plus. Voici un exemple de programme C++.valeur hexadécimale scalaire incorrecte 0x8000000 et plus

// 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 

message d'erreur est ici.

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

Environnement

yaml-cpp: obtenir de svn, ou March.22.2010 v0.2.5

OS: Ubuntu 9.10 i386

Je dois obtenir ensorceler la valeur sur yaml- cpp maintenant, mais je n'en ai aucune idée. S'il vous plaît dites-moi comment l'obtenir d'une autre manière.

Merci,

Répondre

5

La valeur maximale pour un int signé est effectivement 0x7FFFFFFF. Je suis à peu près sûr que c'est le problème.

Essayez d'utiliser unsigned int si vous n'obtenez que des nombres positifs. Ou utilisez long long pour les deux nombres, signés et non signés.

+0

Anzurio, Merci pour votre aide. C'est correct! Je pourrais obtenir 0x80000000. –

+2

@kioto, la meilleure façon de dire ici est de cliquer sur la coche pour accepter la réponse. :-) –

Questions connexes