प्रोटोकॉल बफर का कहना है कि यह contain any arbitrary sequence of bytes कर सकता है। लेकिन यदि मेरे डेटा में '\ 0' है, तो प्रोटोकॉल बफर एक स्ट्रिंग चर से मेरा पूरा डेटा कैसे एन्कोड कर सकता है।सी ++ में प्रोटोकॉल बफर बाइट स्ट्रिंग क्यों है?
13
A
उत्तर
12
प्रोटोकॉल बफर के सी ++ कार्यान्वयन बाइट और स्ट्रिंग प्रकार std::string
के रूप में लौटाता है। इस संरचना में एक लम्बा कार्य होता है जो आपको बताता है कि संबंधित डेटा कितना समय है (साथ ही डेटा भी।) इस प्रकार \0
वर्णों को एम्बेड करने का कोई विशेष महत्व नहीं है।
सेटिंग फ़ंक्शन एक स्ट्रिंग भी स्वीकार करते हैं, या ऐसे संस्करण हैं जो बफर और लंबाई स्वीकार करते हैं। आप एक क्षेत्र तुम सिर्फ यह कर सकते हैं सेट करना चाहते हैं:
pb.set_foo(std::string(data, data_length));
या
pb.set_foo(data, data_length);
+0
यह भी देखें https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls – Raedwald
क्या आप "एक स्ट्रिंग चर" द्वारा मतलब है? क्या यह एक 'char * 'है? क्या यह सी, जावा या कुछ और है? –
@ मार्सेलो मैं अनुमान लगा रहा हूं कि उसका मतलब ' 'से 0 स्ट्रिंग है ... –
मैं अब सी ++ व्यक्ति नहीं हूं, लेकिन मैं इस धारणा के तहत था कि सी ++ स्ट्रिंग में \ 0' का कोई विशेष महत्व नहीं है * * जब तक कि आप उन विधियों का उपयोग नहीं कर रहे हैं जो विशेष रूप से '\ 0' को संभालते हैं। तो ... बस उन तरीकों का उपयोग न करें? –