باستخدام المخازن المؤقتة بروتوكول لإرسال الرموز / الصور الصغيرة

StackOverflow https://stackoverflow.com/questions/1109602

  •  12-09-2019
  •  | 
  •  

سؤال

لدي سؤال بسيط حول STD :: مكتبة المخازن المؤقتة بروتوكول 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 :: سلسلة * MONTIBLE_ICON () تعطيني صداع. إنه يعود سلسلة STD :: لكنني أعتقد أن السلاسل لا يمكن أن تعقد بيانات ثنائية! أو هل يمكنهم؟

يمكنني استخدام وظيفة set_icon (const void *، size_t) لوضع البيانات الثنائية، ولكن بعد ذلك كيف يمكنني الحصول عليها على الجانب الآخر؟

أعتقد أن STD :: سلسلة قد تكون قادرة على الاحتفاظ بالبيانات الثنائية، ولكن كيف ؟؟؟

هل كانت مفيدة؟

المحلول 3

الإجابة على هذا السؤال: كيف تقوم بإنشاء سلسلة STD :: مع NULL EMBEDDED؟

نصائح أخرى

const std::string s = icon();

const void *data=s.c_str();

سلاسل C ++ تمثل الطول صراحة، لذلك يمكن أن تحتوي على بيانات ثنائية, ، بما في ذلك الحرف 0 الذي ينهي سلاسل ج.

تحتاج إلى تجنب اجتياز السلسلة إلى الوظائف التي تتوقع سلسلة نمط 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