2012-07-13 8 views
13

प्रोटोकॉल बफर का कहना है कि यह contain any arbitrary sequence of bytes कर सकता है। लेकिन यदि मेरे डेटा में '\ 0' है, तो प्रोटोकॉल बफर एक स्ट्रिंग चर से मेरा पूरा डेटा कैसे एन्कोड कर सकता है।सी ++ में प्रोटोकॉल बफर बाइट स्ट्रिंग क्यों है?

+0

क्या आप "एक स्ट्रिंग चर" द्वारा मतलब है? क्या यह एक 'char * 'है? क्या यह सी, जावा या कुछ और है? –

+1

@ मार्सेलो मैं अनुमान लगा रहा हूं कि उसका मतलब ' 'से 0 स्ट्रिंग है ... –

+1

मैं अब सी ++ व्यक्ति नहीं हूं, लेकिन मैं इस धारणा के तहत था कि सी ++ स्ट्रिंग में \ 0' का कोई विशेष महत्व नहीं है * * जब तक कि आप उन विधियों का उपयोग नहीं कर रहे हैं जो विशेष रूप से '\ 0' को संभालते हैं। तो ... बस उन तरीकों का उपयोग न करें? –

उत्तर

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^