注意base64_decode
在http://www.adp-gmbh.ch/cpp/common/base64.html
std::string base64_decode(std::string const& encoded_string)
Run Code Online (Sandbox Code Playgroud)
该函数假设返回byte array
以指示二进制数据.但是,该功能正在返回std::string
.我的猜测是,作者试图避免执行显式动态内存分配.
我尝试验证输出是否正确.
int main()
{
unsigned char data[3];
data[0] = 0; data[1] = 1; data[2] = 2;
std::string encoded_string = base64_encode(data, 3);
// AAEC
std::cout << encoded_string << std::endl;
std::string decoded_string = base64_decode(encoded_string);
for (int i = 0; i < decoded_string.length(); i++) {
// 0, 1, 2
std::cout << (int)decoded_string.data()[i] << ", ";
}
std::cout << std::endl;
getchar();
}
Run Code Online (Sandbox Code Playgroud)
解码输出是正确的.只是想确认一下std::string
,保存二进制数据是否有效,避免手动动态内存管理.
std::string s;
s += (char)0;
// s.length() will return 1.
Run Code Online (Sandbox Code Playgroud)
CB *_*ley 46
是的,你可以存储任何序列char
中std::string
.这包括任何二进制数据.
650*_*502 18
是.std :: string可以保存任何char值('\0'
没有特殊含义).但是,我不会惊讶地发现一些C++函数(例如来自外部库)与嵌入NUL的字符串有问题.
无论如何,我不明白你会得到什么,std::string
而不是std::vector<unsigned char>
那会使你的意图更清晰,并提供更多的保证(例如,所有字节都在连续的非共享内存中,以便你可以传递&x[0]
给期待的人用于直接访问的普通缓冲区).