Ver Mensaje Individual
  #12  
Antiguo 26-02-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Reputación: 16
LoPiTaL Va por buen camino
Hola a todos! Gracias por las respuestas.

Pues no puedo daros el pas real, ya que son muchos todos con defines de este estilo, y no dan mucha información.
Lo que sí puedo daros es para qué quiero estas definiciones, os comento:

Estoy haciendo una aplicación cliente-servidor, en la que el servidor es el PC que corre la aplicación, y los clientes son dispositivos con un microcontrolador. El problema es que Delphi (no sé si Delphi o los PCs) trabajan en little-endian, y el uC que utilizo trabaja en big endian. Uso estructuras de datos, para transmitir de PC a uC o viceversa, que mezclan enteros, singles, words y booleans (ya me encargo yo de alinear a 4 bytes para que no hayan huecos de memoria en C -sí, otro problema es que los uC los programo con C), y para realizar la conversión he hecho un procedure que lee un puntero a estructura y un vector con los tamaños de los campos de la estructura, y entonces puede hacer el cambio de endian a estructuras más completas sin necesidad de ir campo a campo, como he visto en muchos ejemplos que hay por la web.

Hasta aquí bien. El problema me ha aparecido cuando he pasado a realizar estructuras más complejas, en el que uno de los campos es otra estructura, por lo que necesitaría un vector de vectores (en el caso más básico) o un vector de vector de vector de vectores (si la estructura contenida en un campo contiene a su vez otra estructura, etc, etc...). Y no sólo es un vector de vectores, sino que en el vector "padre" hay enteros y uno de los items del vector (el relacionado con la estructura hija) es otro vector con la info de la otra estructura.
Utilizo el vector como un indicador del tamaño de cada uno de los campos de tal forma que la función sea capaz de reconocer qué tamaño tiene cada campo y realizar el cambio de endian de manera correcta.
Entonces, si cambio un campo en una estructura que está dentro de otra, me gustaría que cambiando exclusivamente su vector de definición, se actualizasen los vectores de definición de las estructuras "padre".

¿Por qué no me gustaría hacerlo en código? Porque pierdo un poco la noción de qué estoy haciendo, además de quedar separadas la declaración de la estructura y la declaración de su vector de datos, siendo más fácil que se me olvide cambiar la definición del vector cuando cambio la estructura.

Espero haber sido bastante claro. Sé que es algo enrevesada la idea, pero es lo único que se me ha ocurrido, desde el momento en que me dí cuenta que no existía información RTTI para estructuras.

Dicho todo esto, ¿se os ocurre alguna forma más sencilla de trabajar con cambios de endian para estructuras complejas? A mí no se me ocurre nada sencillo, y he estado dándole muchas vueltas, desde todo lo dicho anteriormente, hasta el uso de clases y tal, pero no se me ha ocurrido cómo usar clases para realizar la tarea de la forma más automatizada posible.

NOTA: donde digo estructura me estoy refiriendo a record

Gracias nuevamente por las respuestas,
Un saludo,
LoPiTaL
Responder Con Cita