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?
13
A
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
siz "değişken bir dize" ile ne demek istiyorsunuz? Bu bir char * 'mı? C, Java mı yoksa başka bir şey mi? –
@Marcelo ben * Artık, ama \ 0' bir C++ dizede özel bir anlamı yoktur 'bir izlenimi ++ kişinin bir c değilim –
... 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? –