Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Asignar de una sola vez datos a varios miembros

Estas en el tema de Asignar de una sola vez datos a varios miembros en el foro de C/C++ en Foros del Web. Estoy en mi andadura de aprender c y ahora me he topado con otro problema, aunque tambien es una cuestion que no se si se ...
  #1 (permalink)  
Antiguo 24/03/2016, 12:58
 
Fecha de Ingreso: octubre-2011
Mensajes: 45
Antigüedad: 12 años, 6 meses
Puntos: 0
Asignar de una sola vez datos a varios miembros

Estoy en mi andadura de aprender c y ahora me he topado con otro problema, aunque tambien es una cuestion que no se si se puede hacer..

Tengo un archivo de una longitud fija y los datos que tiene coincide con una estructura que tengo en el programa..
La longitud del archivo es de 4 bytes, los 2 primeros corresponden al segundo miembro de la funcion y los bytes 3 y 4 corresponden al tercer miembro.

Podria al leer el archivo colocar estos datos directamente dentro de la estructura y sin ir metiendolos miembro por miembro?

Código C:
Ver original
  1. // El archivo al que hace referencia t1 contiene estos bytes: 20 21 22 23
  2. // t1 es la ruta de mi archivo
  3. HANDLE hFile = CreateFile(t1, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  4. if (hFile == INVALID_HANDLE_VALUE) return ;
  5.  
  6. DWORD dwBytesRead = 0;
  7. char *buffer = (char*)calloc(sizeof(char), 4);
  8. ReadFile(hFile, buffer, 4, &dwBytesRead, NULL);
  9. // Ahora en buffer tengo el archivo al completo
  10.  
  11. // Mi estructura es esta...
  12. struct estructura {
  13.     struct otra_estructura otraestructura;
  14.     byte primeros    [2];
  15.     byte segundos  [2];
  16. };
  17.  
  18. estructura mystruct[4];  // Declaro 4 porque son 4 archivos aunque vamos ahora con el primero
  19. // Me gustaria saber si es posible hacer algo como en una de estas dos opciones
  20. // 1)
  21. mystruct[0],primeros = buffer[0-2]; // Algo asi como indicar la posicion inicial y final del buffer y asignarselo al miembro de la estructura
  22. mystruct[0].segundos = buffer[2-4];
  23. // 2) o bien haciendolo de esta manera,
  24. // Cogemos la posicion de memoria donde esta estructura[0].primeros y sabiendo que los primeros bytes correspondonden a ese miembro y los siguientes dos a estructura[0].segundos.
  25. // hacer algo como....
  26. mystruct[0].primeros = buffer;

Lamento no ser mas preciso, pero mi nivel de c/c++ es minimo, se lo que son los punteros pero a la hora de escribir codigo me siguo confundiendo.

Gracias
  #2 (permalink)  
Antiguo 24/03/2016, 14:56
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Asignar de una sola vez datos a varios miembros

Hola.

Usar la WinAPI no es como lo mejor que peudes hacer si apenas estas aprendiendo C o C++. Incluso cuando ya se domina el lenguaje, rara vez se tiene que usar directamente.

Código C:
Ver original
  1. mystruct[0],primeros = buffer[0-2]; // Algo asi como indicar la posicion inicial y final del buffer y asignarselo al miembro de la estructura
  2. mystruct[0].segundos = buffer[2-4];

Eso que quieres hacer asi como esta no se puede. Y de hecho, como lo planteas esta mal.

Tendrias que hacer algo asi:

Código C:
Ver original
  1. mystruct[0].primeros[0] = buffer[0];
  2. mystruct[0].primeros[1] = buffer[1];
  3. mystruct[0].segundos[0] = buffer[2];
  4. mystruct[0].segundos[1] = buffer[3];

Si lo que quieres es escribir menos fijate en los indices y trata de crear un ciclo for o while que haga el manejo de indices.

Por otro lado, podrías revisar la funcion memcpy de la librería estandar de C. Tal vez es lo que buscas.

Saludos
  #3 (permalink)  
Antiguo 24/03/2016, 19:40
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Asignar de una sola vez datos a varios miembros

Edito: no he dicho nada. Estoy desde el móvil y me ha jugado una mala pasada.

Mil disculpas.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: char, funcion, programa, vez
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:14.