How-to emittieren und analysieren unformatierte Binärdaten mit yaml-cpp
-
27-09-2019 - |
Frage
Ist es möglich, zu emittieren und lesen (Parsing) Binärdaten (Bild, eine Datei usw.)? Wie dies hier gezeigt: http://yaml.org/type/binary.html Wie kann ich das in yaml-cpp?
Lösung
Wie die Revision 425 , ja! (Zur Emission)
YAML::Emitter emitter;
emitter << YAML::Binary("Hello, World!", 13);
std::cout << emitter.c_str();
Ausgänge
--- !!binary "SGVsbG8sIFdvcmxkIQ=="
Die Syntax ist
YAML::Binary(const char *bytes, std::size_t size);
Ich war nicht sicher, wie das Byte-Array weitergeben müssen: char
ist nicht unbedingt ein Byte, also bin ich nicht sicher, wie portable der Algorithmus ist. Welches Format ist Ihr Byte-Array typischerweise in?
(Das Problem ist, dass uint8_t
nicht Standard C ++ noch, so dass ich ein wenig mache mir Sorgen um es zu benutzen.)
Wie für die Analyse, yaml-cpp
wird sicherlich die Daten als Zeichenfolge analysiert, aber es gibt keine Decodierung Algorithmus vor.
Andere Tipps
Hier wird beantwortet, wie man lesen / Parse-Binärdaten aus einer YAML-Datei mit der YAML-CPP-Bibliothek.
Diese Antwort geht davon aus, dass Sie in der Lage sind, ein YAML :: Node Knotenobjekt aus einer YAML-Datei zu laden, - erklärte in den yaml-CPP-Tutorials: https://github.com/jbeder/yaml-cpp/wiki/Tutorial ).
Der Code Binärdaten aus einem yaml Knoten zu analysieren ist:
YAML::Binary binary = node.as<YAML::Binary>();
const unsigned char * data = binary.data();
std::size_t size = binary.size();
Dann haben Sie eine Reihe von Bytes „Daten“ mit einer bekannten Größe „Größe“.