xdr (external data representation) tipos y codificación
DESCRIPTION
XDR (External Data Representation) Tipos y codificación. Características. Tipos implícitos La codificación ( big endian ) ocupa siempre un tamaño múltiplo de 4 bytes (rellenando con ceros por la dcha) Se asume que la transmisión: Preserva el contenido de cada byte - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/1.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
XDR (External Data Representation)
Tipos y codificación
![Page 2: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/2.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Características
• Tipos implícitos
• La codificación (big endian) ocupa siempre un tamaño múltiplo de 4 bytes (rellenando con ceros por la dcha)
• Se asume que la transmisión:– Preserva el contenido de cada byte– Preserva el orden de los bytes (el
primero se numera con 0)
![Page 3: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/3.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Sintaxis genérica
• Muchos de los tipos simples tienen el mismo nombre que en C
• El usuario puede definir tipos complejos agregando tipos simples
• <> denota un número variable de datos en una secuencia
• [] denota un número fijo de datos en una secuencia
![Page 4: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/4.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Entero
• Sintaxis:int identificador;
• Codificación– 32 bits (4 bytes), negativos en C-2– Rango: [-2147483648, 2147483647]– Ejemplo: -3
FF FF FF FD
0 1 2 3
MSB LSB
![Page 5: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/5.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Natural
• Sintaxis:unsigned int identificador;
• Codificación– 32 bits (4 bytes)– Rango: [0, 4294967295]– Ejemplo: 3
00 00 00 03
0 1 2 3
MSB LSB
![Page 6: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/6.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Enumerados
• Sintaxis:enum identificador {nombre1=constante, ...};
• Ejemplo:enum colores {
ROJO=1, AMARILLO=3, AZUL=5 };
• Codificación– Como los enteros
![Page 7: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/7.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Booleanos
• Sintaxis:bool identificador;
• Codificación– Equivalente a:
enum bool {TRUE=1, FALSE=0};
![Page 8: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/8.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Hiperenteros
• Sintaxis:hyper identificador;
• Codificación– 64 bits (8 bytes)– Rango: [-263, 263-1]– Ejemplo: -3
FF FF FF FF
0 1 2 3
MSB
FF FF FF FD
4 5 6 7
LSB
![Page 9: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/9.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Hiperenteros sin signo
• Sintaxis:unsigned hyper identificador;
• Codificación– 64 bits (8 bytes)– Rango: [0, 264-1]– Ejemplo: 3
00 00 00 00
0 1 2 3
MSB
00 00 00 03
4 5 6 7
LSB
![Page 10: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/10.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Reales (precisión simple)
• Sintaxis:float identificador;
• Codificación– 32 bits (4 bytes)– Coma flotante, norma IEEE-754– Ejemplo: +1
3F 80 00 00
0 1 2 3
MSB LSB
![Page 11: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/11.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Reales (precisión doble)
• Sintaxis:double identificador;
• Codificación– 64 bits (8 bytes)– Coma flotante, norma IEEE-754, precisión
ampliada.
BF F0 00 00
0 1 2 3
MSB
00 00 00 00
4 5 6 7
LSB
-1
![Page 12: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/12.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos simples: Constantes
• Sintaxis:const identificador=valor;
• Codificación– La del tipo asociado al valor.– Ejemplo:
const MAX_CLIENTES=5;
![Page 13: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/13.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipo opaco
• Secuencia de n bytes sin significado especial para XDR.
• Opaco de longitud fija:– Sintaxis:
opaque identificador[n];– Codificación
Byte 0 Byte 1 Byte 2 ... Byte n-1 0 ... 0
n bytes rellenoMúltiplo de 4
![Page 14: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/14.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipo opaco
• Opaco de longitud variable:– Sintaxis:
opaque identificador<m>;
m especifica el tamaño maximo (n m) Puede omitirse (pero no las <>)
– Codificación:• Primero se envia el número n de bytes, y
despues sus valores
Byte 0 Byte 1 ... Byte n-1 0 ... 0
n bytes rellenoMúltiplo de 4
Valor de n (natural)
4 bytes
![Page 15: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/15.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Datos estructurados
• Cadenas de texto• Arrays
– De longitud fija– De longitud variable
• Estructuras• Uniones discriminadas• Datos opcionales
![Page 16: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/16.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Cadenas de texto
• Una cadena es una secuencia de n códigos ASCII• Sintaxis:
string identificador<m>;
m especifica el tamaño maximo de la cadena (nm). Puede omitirse (pero no las <>)
• Codificación: como los opacos• Ejemplo: string txt<20>;
inicializado con el texto “Cadena”
43 0 0
6 bytes = “Cadena” relleno
Múltiplo de 4
4 bytes
00 00 00 06
n=6
61 64 65 6E 61
![Page 17: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/17.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Arrays
• Un array es una secuencia de n datos del mismo tipo.
• Array de longitud fija.– Sintaxis
nombre_tipo identificador[n]
– Codificación:
Elemento 0 ...
n elementos
Elemento 1 Elemento n-1
![Page 18: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/18.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Arrays
• Arrays de longitud variable– Sintaxis
nombre_tipo identificador<m>
m es el número máximo de elementos. Puede omitirse (pero no las <>)
– Codificación:• Se envía primero el número n de elementos
(dato entero), y despúes los elementos.
Elemento 0 ...
n elementos
Elemento 1 Elemento n-1Valor de n
4 bytes
![Page 19: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/19.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Estructuras
• Sintaxisstruct identificador { declaracion_componente_A; declaracion_componente_B; ... declaracion_componente_X;}
• Codificación:– Cada componente se codifica según su
tipo y se envían en secuencia.
Componente A ...Componente B Componente X
![Page 20: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/20.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Estructuras: ejemplo
struct prueba { int x; float y; string z<10>;};
• Se carga campo x con 2534h, campo y con 12.5, campo z con “Cadena”
• Codificación:
00 00 25 34 41 48 00 00 00 00 00 06
43 61 64 65 6E 61 00 00
x y z
![Page 21: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/21.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Uniones discriminadas
• Permiten “elegir” el tipo del dato, mediante un discriminante
• Sintaxisunion identificador switch(declaración discriminante){ case valor1: declaración caso1; case valor2: declaración caso2; ... default: declaración caso defecto;}
• Codificación:Valor del discriminante (X)
4 bytes
Codificación del casoX
![Page 22: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/22.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Uniones discriminadas: Ejemplos
union ejemplo switch(int q){ case 1: int x; case 2: float y; case 3: double z; default: string txt<20>;
};
Inicialización:
• q con 1
• x con 0x2534
00
int4 bytes
00 00 00 01
q=1
00 25 34
![Page 23: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/23.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Uniones discriminadas: Ejemplos
union ejemplo switch(int q){ case 1: int x; case 2: float y; case 3: double z; default: string txt<20>;
};
Inicialización:
• q con 2
• y con 12.5
41
float4 bytes
00 00 00 02
q=2
48 00 00
![Page 24: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/24.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Uniones discriminadas: Ejemplos
union ejemplo switch(int q){ case 1: int x; case 2: float y; case 3: double z; default: string txt<20>;
};
Inicialización:
• q con 3
• z con 12.5
40
double4 bytes
00 00 00 03
q=3
29 00 00 00 00 00 00
![Page 25: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/25.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Uniones discriminadas: Ejemplos
union ejemplo switch(int q){ case 1: int x; case 2: float y; case 3: double z; default: string txt<20>;
};
Inicialización:
• q con 27
• txt con “Cadena”
4 bytes
00 00 00 1B
q=274 bytes
00 00 00 06
longitud cadena
43 0 0
6 bytes = “Cadena” relleno
61 64 65 6E 61
![Page 26: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/26.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Casos vacíos: void
• El tipo void permite especificar un dato vacío (inexistente).
• Este tipo no tiene codificación.• Ejemplo:
union ejemplo switch(int q){ case 1: int x; case 2: float y; case 3: double z; default: void;};
Si q vale 8
4 bytes
00 00 00 08
q=8
No hay dato después
![Page 27: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/27.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Datos opcionales
• Pueden llevar información o estar vacíos
• Sintaxistipo *identificador;
• Codificación:– Si no hay dato se codifica el entero 0 – Si hay dato, se codifica el entero 1
seguido de la codificación del dato
4 bytes
00 00 00 00
4 bytes
00 00 00 01 Codficación dato
![Page 28: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/28.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Datos opcionales: uso
• Uso: codificar punteros cuyo valor puede ser NULL (no hay dato) o bien apuntan a un dato.
• Aplicación típica: estructuras recursivas (listas, árboles...)
• Ejemplo:
struct lista { string cadena<>; lista *otra;};
![Page 29: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/29.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Datos opcionales: ejemplo
struct lista { string cadena<>; lista *otra;};
cadena: “Una”otra: NULL
4 bytes
00 00 00 03
longitud cadena
55 00 00
“Una”re
lleno
6E 61 00 00 00
¿Otra?NO
![Page 30: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/30.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Datos opcionales: ejemplo
struct lista { string cadena<>; lista *otra;};
cadena: “dos”otra: NULL
cadena: “Una”otra:
4 bytes
00 00 00 03
longitud cadena
55 00 01
“Una”
relle
no
6E 61 00 00 00
¿Otra?SI
4 bytes
00 00 00 03
longitud
64 00 00
“dos”
relle
no
6F 73 00 00 00
¿Otra?NO
![Page 31: XDR (External Data Representation) Tipos y codificación](https://reader033.vdocument.in/reader033/viewer/2022061614/56812b91550346895d8fad2d/html5/thumbnails/31.jpg)
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática
Tipos definidos por el usuario
• La palabra typedef delante de una declaración permite dar nombres a los tipos.
• Ejemplo:typedef int huevo;typedef huevo huevera[12];
– En lo sucesivo, huevera equivale a un array de 12 enteros.