Comment à émettre et analyser des données binaires brutes en utilisant yaml-cpp
-
27-09-2019 - |
Question
Est-il possible d'émettre et lire (parse) des données binaires (image, fichier, etc.)? Comme cela est montré ici: http://yaml.org/type/binary.html Comment puis-je faire en YAML-cpp?
La solution
Au révision 425 , oui! (Pour l'émission)
YAML::Emitter emitter;
emitter << YAML::Binary("Hello, World!", 13);
std::cout << emitter.c_str();
sorties
--- !!binary "SGVsbG8sIFdvcmxkIQ=="
La syntaxe est
YAML::Binary(const char *bytes, std::size_t size);
Je ne savais pas comment passer le tableau d'octets: char
est pas nécessairement un octet, donc je ne sais pas comment l'algorithme portable est. Quel est le format de votre tableau d'octets généralement dans?
(Le problème est que uint8_t
n'est pas standard C ++, donc je suis un peu inquiet de l'utiliser.)
En ce qui concerne l'analyse syntaxique, yaml-cpp
va certainement analyser les données sous forme de chaîne, mais il est encore pas d'algorithme de décodage.
Autres conseils
Ici, il est répondu à lire des données binaires / parse à partir d'un fichier YAML avec la bibliothèque yaml-cpp.
Cette réponse suppose que vous êtes en mesure de charger un objet YAML :: noeud noeud à partir d'un fichier YAML - expliqué dans les tutoriels yaml-cpp: https://github.com/jbeder/yaml-cpp/wiki/Tutorial ).
Le code pour analyser des données binaires à partir d'un noeud de yaml est:
YAML::Binary binary = node.as<YAML::Binary>();
const unsigned char * data = binary.data();
std::size_t size = binary.size();
Ensuite, vous avez un tableau d'octets « données » avec une taille connue « taille ».