2012-04-10 11 views
5

Como no recibo una respuesta en this tengo que hacer un prototipo y controlarme, ya que mis encabezados de conjunto de datos deben ser de tamaño fijo, necesito cadenas de tamaño fijo. Entonces, ¿es posible especificar cadenas de tamaño fijo o matrices de bytes en los búferes de protocolo? No es evidente aquí, y me siento mal por forzar cadenas de tamaño fijo en el mensaje de encabezado. --i.e, std::string('\0', 128);búferes de protocolo: ¿no hay notación para búferes de tamaño fijo?

Si no prefiero usar un #pragma pack(1) struct header {...}; '

edición

pregunta respondió indirectamente here. Responderá y excepto

Respuesta

2

protobuf no tiene tal concepto en el protocolo, ni en el lenguaje de esquema .proto. En cadenas y blobs, los datos siempre son técnicamente longitud variable usando un prefijo de longitud (que a su vez usa la codificación varint, por lo que incluso la longitud es de longitud variable).

Por supuesto, si solo almacena datos de una longitud determinada, se alineará. Tenga en cuenta también que dado que las cadenas en protobuf son unicode usando la codificación UTF-8, la longitud de los datos codificados es no tan simple como el número de caracteres (a menos que esté usando solo caracteres ASCII).

0

Esto es una pequeña aclaración a la respuesta anterior. Protocol Buffers no no codifica cadenas como UTF-8, las codifica como bytes regulares. El formato en línea sería la cantidad de bytes consumidos seguidos de los bytes reales. Ver https://developers.google.com/protocol-buffers/docs/encoding/.

Si bien el formato en cable es siempre el mismo, los búferes de protocolo proporcionan dos interfaces para que los desarrolladores puedan usar, cadena y bytes, con la diferencia principal de que el primero generalmente intentará proporcionar tipos de cadenas al desarrollador donde el el último intentará proporcionar tipos de bytes (es decir, Java proporcionará String para string y ByteArray para bytes).

+0

UTF-8 es una codificación de Unicode: toma caracteres Unicode en bytes. Protobuf usa UTF-8 para obtener los bytes regulares. – solidsnack

+0

@snack, por favor, puede volver a leer cuidadosamente la primera sesión. – Claris

Cuestiones relacionadas