문제

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이 이진 데이터를 보유 할 수 있다고 생각하지만 어떻게 ????

도움이 되었습니까?

다른 팁

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();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top