使用Protocol Buffers发送图标/小图片
-
12-09-2019 - |
题
我对的std :: string和谷歌的协议缓冲区库一个简单的问题。 我已经定义的消息如下所示:
message Source
{
required string Name = 1;
required uint32 Id = 2;
optional string ImplementationDLL = 3;
optional bytes Icon = 4;
}
我想使用的图标字段发送图像,这很可能将是一个PNG图像。 这喂养到protobuf的编译后,我得到了这样的访问/操作图标字段。
inline bool has_icon() const;
inline void clear_icon();
static const int kIconFieldNumber = 4;
inline const ::std::string& icon() const;
inline void set_icon(const ::std::string& value);
inline void set_icon(const char* value);
inline void set_icon(const void* value, size_t size);
inline ::std::string* mutable_icon();
的的std :: string * mutable_icon()函数是让我头疼。它返回一个std ::字符串,但我相信字符串不能容纳二进制数据!或可以它们?
我可以使用set_icon(常量无效*,为size_t)函数把二进制数据,但后来我如何得到它的另一面?
我想的std :: string也许能够容纳二进制数据,但如何????
解决方案 3
在回答这个问题:你如何构造的std :: string具有嵌入的空?
其他提示
const std::string s = icon();
const void *data=s.c_str();
C ++串分别表示的长度明确,所以它们可以含有二进制数据,包括0个字符的终止C字符串
您需要避免该字符串传递给期待一个C风格串的功能,因为它们不会处理嵌入0字符。
void String2Image(string binFile,const char* outImage)
{
fstream imgFile(outImage,ios::binary|ios::out);
for(int i=0; i<binFile.length(); ++i)
{
imgFile << binFile[i];
}
imgFile.close();
}
不隶属于 StackOverflow