C ++, как конвертировать широкие строки в base64? - PullRequest
3 голосов
/ 23 мая 2011

Каков наилучший способ преобразования широкой строки в base64?

Ответы [ 3 ]

6 голосов
/ 23 мая 2011

Октет (8-битные символы) -> Преобразование Base64 (6-битные символы) работает с байтами, а не с символами, поэтому работает одинаково, независимо от кодировки строки.


Для ясности: Base64 не является кодировкой символов. Отправитель и получатель должны согласовать кодировку символов (ASCII, UTF-8, UTF-16, UCS-2 и т. Д.), А также метод транспорта (Base64, gzip и т. Д.).

1 голос
/ 23 мая 2011

Для кодирования некоторых данных в base64 вы можете использовать класс Base64 из библиотеки Xerces.Это может выглядеть следующим образом:

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) );
0 голосов
/ 23 мая 2011

Если вы используете Visual C ++ с MFC, для этого уже есть библиотека.Проверьте Base64Encode и Base64Decode.

...