2011-01-11 58 views
4

我使用base64編碼/自http://www.adp-gmbh.ch/cpp/common/base64.htmlUnicode版本Base64編碼/

它工作得很好用下面的代碼進行解碼的解碼。

const std::string s = "I Am A Big Fat Cat" ; 

    std::string encoded = base64_encode(reinterpret_cast<const unsigned char*>(s.c_str()), s.length()); 
    std::string decoded = base64_decode(encoded); 

    std::cout << _T("encoded: ") << encoded << std::endl; 
    std::cout << _T("decoded: ") << decoded << std::endl; 

然而,當涉及到Unicode

namespace std 
{ 
#ifdef _UNICODE 
    typedef wstring tstring; 
#else 
    typedef string tstring; 
#endif 
} 
const std::tstring s = _T("I Am A Big Fat Cat"); 

如何我還可以利用上面的功能呢?

僅僅改變

std::string base64_encode(unsigned TCHAR const* , unsigned int len); 
std::tstring base64_decode(std::string const& s); 

將無法​​正常工作。

(我希望BASE64_ENCODE返回ASCII。因此,的std :: string應該用來代替的std :: tstring)

+0

你試過另一個編碼器了嗎?這一個給`std :: string的http://code.google.com/p/stringencoders/source/browse/trunk/src/modp_b64.h – 2011-01-11 03:56:19

+0

你的「只是改變」不起作用的症狀是什麼?我可能期望字符串被截斷,因爲長度是用字符而不是字節來指定的,否則應該是OK的。 – 2011-01-11 04:27:10

回答

4

的Base64編碼的二進制數據爲文本。所以你只需要使用wcstombs & co就可以將你的寬字符轉換成相應的字節,而且你很好。