对于常规C字符串,空字符'\0'表示数据的结尾.
那么std::string,我可以使用嵌入空字符的字符串吗?
我正在使用Google Protocol Buffers将消息发送到服务器.我的困惑在于如何发送图像与我如何接收图像.请参阅下面的代码了解详情,但我的问题是:
我是否需要对从未进行过base64编码的返回字符串进行base64_decode,因为它是使用char*和size发送的?也许Google Protocol Buffers处理这个问题,但我在生成的类中找不到任何证据.
这是发送数据的代码.显然,我发送一个unsigned char*和一个const long unsigned int来设置图像.
std::string message::myMessaging::generateMessage(unsigned char *imageData, const long unsigned int elemSize, long unsigned int *msgSize)
{
ImageMessage message;
message.set_ismaster(true);
message.set_personname("Lucy");
message.set_image(imageData, elemSize);
string out;
message.SerializeToString(&out);
int size = message.ByteSize();
memcpy(msgSize, &size, sizeof(int));
return out;
}
Run Code Online (Sandbox Code Playgroud)
这是接收数据的代码.从服务器返回,我收到messageData作为const字符串.我创建了我的Google协议缓冲区消息并对其进行解析以从中获取信息.在这里,我的图像是一个字符串.
std::string message::myMessaging::parseMessage(const string messageData, long unsigned int *msgSize)
{
ImageMessage message;
message.Clear();
message.ParseFromString(messageData);
string personname = message.personname();
string image = message.image();
// do I need to decode it ?
std::string …Run Code Online (Sandbox Code Playgroud)