Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Record ¿un nuevo misterio? (https://www.clubdelphi.com/foros/showthread.php?t=69306)

jfh900 09-08-2010 17:06:13

Record ¿un nuevo misterio?
 
Hola a todos. Soy nuevo en le foro, pero no en la programación en Delphi.

Escribo este post por que me he encontrado una situación extraña utilizando los records. Me explico:

Estoy realizando un componente para capturar los datos de un GPS. Básicamente el GPS manda unas tramas vía RS232 con los distintos datos. Estas tramas se identifican por un comienzo y fin de trama y un código de trama. Bien yo capturo la trama e intento copiar los datos a una variable definida por un record para separar los distintos datos. Hasta aquí todo correcto.

Cuando empiezo a hacer pruebas los datos que obtengo no coinciden con los datos enviados, y empiezo a indagar, llegando al meollo de la cuestión.

Probar lo siguiente:

Ponemos un record del siguiente tipo:

Código Delphi [-]
TTrama=Record       
   Byte1: Byte;       
   Byte2: Byte;       
   Byte3: Byte;       
   Numer1: DWord;       
   Numer2: DWord;       
   Numer3: DWord;       
   Numer4: DWord;       
   Table: Array[1..13] of byte; 
End;

Bien si añadimos un botón para ver el tamaño del recor:

Código Delphi [-]
ShowMessage(IntToStr(SizeOf(TTrama)));

Obtenemos: 36.

Si hacemos las cuentas tenemos:

3+4x4+13=3+16+13=32

Como podéis ver no coincide el tamaño definido o esperado con el que me devuelve el compilador.

¿Alguien tiene la solución?.

Un saludo y perdón por el peñazo.

delphi.com.ar 09-08-2010 17:38:34

Prueba este sutil cambio:
Código Delphi [-]
TTrama = packed record
   Byte1: Byte;
   Byte2: Byte;
   Byte3: Byte;
   Numer1: DWord;
   Numer2: DWord;
   Numer3: DWord;
   Numer4: DWord;
   Table: Array[1..13] of byte;
End;

Cita:

Empezado por Delphi Help
By default, the values in a structured type are aligned on word or double-word boundaries for faster access. When you declare a structured type, you can include the reserved word packed to implement compressed data storage.

Saludos!

ecfisa 09-08-2010 17:53:30

Hola.

O también con la directiva:
Código Delphi [-]
{$A-}


Saludos.

jfh900 09-08-2010 17:59:43

Muchas gracias Federico Firenze y ecfisa esa es la solución. Desgraciadamente la ayuda que trae Delphi sobre el asunto está un poco oculta, despues de saber la solución, efectivamente estaba en la ayuda.

Muchas gracias a los dos y un saludo.


La franja horaria es GMT +2. Ahora son las 23:34:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi