C++, comment convertir une chaîne large en base64 ?
-
09-09-2020 - |
Question
Quelle est la meilleure façon de convertir une chaîne large en base64 ?
La solution
octet (Symboles 8 bits) -> Base64 (Symboles 6 bits) Conversion des travaux sur les octets, non des caractères, il fonctionne donc de la même manière indépendante de votre codage de chaîne.
Pour être clair: base64 n'est pas un caractère codant.L'expéditeur et le récepteur doivent être d'accord sur le codage de caractères (ASCII, UTF-8, UTF-16, UCS-2, etc.) ainsi que la méthode de transport (base64, gzip, etc.).
Autres conseils
Pour encoder certaines données à base64, vous pouvez utiliser base64 classe de la bibliothèque de Xerces.Cela pourrait ressembler à ce qui suit:
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 vous utilisez Visual C++ avec MFC, il existe déjà une bibliothèque pour ce faire.Vérifier Base64Encode
et Base64Decode
.