C++ cómo convertir amplia cadena en base64?
-
09-09-2020 - |
Pregunta
¿Cuál es la mejor manera de convertir amplia cadena en base64?
Solución
octeto (símbolos de 8 bits) -> bases64 (símbolos de 6 bits) La conversión funciona en bytes, no caracteres, por lo que funciona de la misma manera independiente de su codificación de cadena.
Para ser claro: Base64 no es una codificación de caracteres.El remitente y el receptor deben acordar la codificación de caracteres (ASCII, UTF-8, UTF-16, UCS-2, etc.), así como el método de transporte (BASE64, GZIP, etc.).
Otros consejos
Para codificar algunos datos a BASE64, puede usarla base64 Clase de la biblioteca de Xerces.Podría parecer lo siguiente:
std::wstring input_string = SOME; // some wide string
// keep it in contiguous memory (the following string is not needed in C++0x)
std::vector<wchar_t> raw_str( input_string.begin(), input_string.end() );
XMLSize_t len;
XMLByte* data_encoded = xercesc::Base64::encode( reinterpret_cast<const XMLByte*>(&raw_str[0]), raw_str.size()*sizeof(wchar_t), &len );
XMLCh* text_encoded = xercesc::XMLString::transcode( reinterpret_cast<char*>(data_encoded) );
// here's text_encoded is encoded text
// do some with text_encoded
XMLString::release( &text_encoded );
XMLString::release( reinterpret_cast<char**>(&data_encoded) );
Si está utilizando Visual C++ y MFC, ya hay una biblioteca para hacer esto.Echa un vistazo Base64Encode
y Base64Decode
.