Como fazer e analisar dados binários brutos usando YAML-CPP
-
27-09-2019 - |
Pergunta
É possível emitir e ler dados binários (parse) (imagem, arquivo etc.)? Como se fosse mostrado aqui:http://yaml.org/type/binary.htmlComo posso fazer isso no YAML-CPP?
Solução
AS Revisão 425, sim! (para emitir)
YAML::Emitter emitter;
emitter << YAML::Binary("Hello, World!", 13);
std::cout << emitter.c_str();
saídas
--- !!binary "SGVsbG8sIFdvcmxkIQ=="
A sintaxe é
YAML::Binary(const char *bytes, std::size_t size);
Eu não tinha certeza de como passar a matriz de bytes: char
Não é necessariamente um byte, então não tenho certeza de quão portátil é o algoritmo. Em que formato é sua matriz de bytes normalmente?
(O problema é que uint8_t
Ainda não é o C ++ padrão, por isso estou um pouco preocupado em usá -lo.)
Quanto à análise, yaml-cpp
certamente analisará os dados como uma string, mas ainda não há algoritmo de decodificação.
Outras dicas
Aqui é respondido como ler/analisar dados binários de um arquivo YAML com a biblioteca YAML-CPP.
Esta resposta pressupõe que você possa carregar um objeto YAML :: Node de um arquivo YAML - explicado nos tutoriais do YAML -CPP: https://github.com/jbeder/yaml-cpp/wiki/tutorial).
O código para analisar dados binários de um nó YAML é:
YAML::Binary binary = node.as<YAML::Binary>();
const unsigned char * data = binary.data();
std::size_t size = binary.size();
Então você tem uma matriz de bytes "dados" com um tamanho conhecido "tamanho".