2012-07-13 16 views
13

protokol arabelleği contain any arbitrary sequence of bytes olabilir. ancak verilerim '\ 0' içeriyorsa, protokol arabelleğim tüm verileri bir dize değişkeninden nasıl kodlayabilir.protokol arabellek baytları neden C++ 'da dize?

+0

siz "değişken bir dize" ile ne demek istiyorsunuz? Bu bir char * 'mı? C, Java mı yoksa başka bir şey mi? –

+1

@Marcelo ben * Artık, ama \ 0' bir C++ dizede özel bir anlamı yoktur 'bir izlenimi ++ kişinin bir c değilim –

+1

... O' demektir '' dan string' tahmin ediyorum * ** '0 specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically specifically you you you you you you you you you you you you you you you you you you you you you you you you '' '' '' '' ' Yani ... bu yöntemleri kullanmıyor musun? –

cevap

12

protokol tamponların C++ uygulaması std::string olarak bayt ve dizi türlerini döndürür. Bu yapı ilgili veri ne kadar süre belirten bir uzunluk işlevini içeren (yanı sıra verilerin kendilerini.) Böylece gömülmüş \0 karakterlerin özel önemi yoktur.

ayar fonksiyonları

de bir dize kabul etmek veya bir tampon ve uzunluk kabul versiyonları vardır. size sadece bunu olabilen bir alanı ayarlamak istiyorsanız:

pb.set_foo(std::string(data, data_length)); 

veya

pb.set_foo(data, data_length); 
+0

Ayrıca bkz https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls – Raedwald