6. Cadena de identificación de los datos transportados (tag types)
La segunda parte de un mensaje OSC es una cadena que empieza con el símbolo "," y que está compuesta por letras que sirven para identificar los tipo de datos que el mensaje transporta. Cada letra representa un tipo de dato (cadenas, números enteros, números con coma flotante, etc.
En la primera versión del protocolo (la versión 1.0), los tipo de datos posibles eran pocos: números enteros, números con coma flotante, cadenas de caracteres y por último matrices de byte . En la versión sucesiva (la 1.1), se agregaron otros tipos de datos aunque si los mas importantes y usados son tres: cadenas de caracteres, números enteros y números con coma flotante.
En la figura siguiente podemos observar un elenco de los tipos de datos estándar (versión 1.1 del protocolo):
7. Datos
La tercera parte del mensaje son los datos, uno después de otro y sin ningún byte de separación entre ellos. Los números generalmente ocupan 4 bytes (con alguna excepción de 8 byte) mientras las cadenas de caracteres y las matrices de bytes pueden tener un largo variable pero siempre un valor múltiplo de 4 (ver el párrafo siguiente).
8. Las cadenas de caracteres OSC
Son secuencias de caracteres ASCII. Se identifica con la letra "s" minúscula del campo Type Tag . El dato tiene que respetar dos condiciones: la primera es que el final de la cadena debe haber por lo menos un byte con valor 0 (/0) indicando el final de ella, la segunda es que el largo de la cadena completa en byte debe ser un múltiplo de 4 (por ejemplo 4,8,12,16,20 bytes, etc.).
Para lograr esta segunda condición, se agregan al final bytes con 0 hasta llegar al valor necesario (desde uno hasta tres byte).
9. Blob (matriz de byte)
El tipo de dato Blob permite di transportar una matriz de bytes de cualquier dimensión. Está constituido por dos partes. La primera parte es un número entero que ocupa 4 bytes (int32) y que indica la dimensión de la matriz . La segunda parte es la matriz de byte propiamente dicha. Si la cantidad de elementos de la matriz no es múltiplo de 4 se deben agregar al final de la matriz unos bytes con contenido 0 para alcanzar este valor múltiplo. Los byte agregados no afectan el número de la dimensión de la matriz. El tipo blob es útil cuando se deben transmitir un grupo de bytes que pueden contener como dato 0 como por ejemplo un diseño bitmap y que no sería posible hacerlo con una dato del tipo string.
En la figura podemos observar un ejemplo de dato Blob constituido por una matriz de 6 bytes. Los primeros 4 bytes representan un número entero (Int32) que indica la cantidad de byte que componen la matriz, en este caso 6. Los siguientes bytes representan la matriz. Es interesante observar que el tercer byte de la matriz tiene como contenido 0. Si hubiéramos usado un dato del tipo cadena (string) para transportar esta matriz, este byte habría creado un conflicto porque sería astato interpretado como el final de la cadena. Los dos últimos byte con valor 0 sirven para "redondear" el largo del dato a un múltiplo de 4.
Artículos relacionados:
-Introducción al OSC – Primera parte
-Introducción al OSC – Tercera parte
Indice de todos los artículos de Inventable
Los contenidos de este blog son originales y están bajo una licencia Creative Commons BY_NC_SA