2012-07-13 9 views
13

buffer de protocolo dice que puede contain any arbitrary sequence of bytes. pero si mis datos contienen '\ 0', cómo el buffer del protocolo puede codificar toda mi información desde una variable de cadena.¿por qué el protocolo Buffer bytes es una cadena en C++?

+0

¿Qué quiere decir por "una cadena variable"? ¿Es esto un 'char *'? ¿Es C, Java o algo más? –

+1

@Marcelo Supongo que quiere decir 'cadena' de' '... –

+1

Ya no soy una persona de C++, pero tenía la impresión de que' \ 0' no tiene un significado especial en una cadena de C++ * * a menos que ** esté usando métodos que manejan específicamente '\ 0'. Entonces ... simplemente no uses esos métodos? –

Respuesta

12

La implementación C++ de los búferes de protocolo devuelve el byte y los tipos de cadena como std::string. Esta estructura contiene una función de longitud que le dice cuánto tiempo son los datos correspondientes (así como también los datos). Por lo tanto, no hay una importancia especial de \0 caracteres incrustados.

Las funciones de configuración también aceptan una cadena, o hay versiones que aceptan un búfer y la longitud. Si desea establecer un campo que sólo puede hacer esto:

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

o

pb.set_foo(data, data_length); 
+0

Ver también https://stackoverflow.com/questions/2845769/can-a-stdstring-contain-embedded-nulls – Raedwald

Cuestiones relacionadas