프로토콜 버퍼를 사용하여 아이콘/작은 이미지를 보냅니다
-
12-09-2019 - |
문제
STD :: String 및 Google의 프로토콜 버퍼 라이브러리에 대해 간단한 질문이 있습니다. 나는 다음과 같은 메시지를 정의했습니다.
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 (const void*, size_t) 함수를 사용하여 이진 데이터를 넣을 수 있지만 다른 쪽에서 어떻게 얻습니까?
STD :: String이 이진 데이터를 보유 할 수 있다고 생각하지만 어떻게 ????
해결책 3
이 질문에 대한 답 : 널이 포함 된 std :: 문자열을 어떻게 구성합니까?
다른 팁
const std::string s = icon();
const void *data=s.c_str();
C ++ 문자열은 길이를 명시 적으로 나타냅니다 이진 데이터를 포함 할 수 있습니다, C 스트링을 종료하는 0-character를 포함하여.
내장 된 0-chars를 처리하지 않기 때문에 문자열을 C 스타일 문자열을 기대하는 함수로 전달하지 않아야합니다.
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