2011-01-11 36 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就可以将你的宽字符转换成相应的字节,而且你很好。