Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Xedrox en 4 Agosto 2013, 23:26 pm



Título: Long long to char
Publicado por: Xedrox en 4 Agosto 2013, 23:26 pm
Buenas gente, les hago una consulta, tengo una clase con la siguiente estructura:

Código:
class Dummy
{
     public:
          char mensaje[4];
          long long valor;
          char mensaje2[4];

...


Las variables de ese objeto las tengo instanciadas de la siguiente manera:

Código:
mensaje: "hola"
valor:  0
mensaje2: "hola"

Cabe aclarar que los array de char no se le carga caracter nulo.

Lo que tengo que hacer es convertir este objeto en un "char*" que despues se lo paso por parametro a una clase (la cual no tengo visible el codigo) para que luego lo grabe en un archivo. Se que parece raro pero tengo que usar esa clase por limitacion de la plataforma. Prosigo, el main me queda asi:

Código:
Dummy obj;
instancarVariablesObjetos(obj);
int longObj=sizeof(Dummy); //Da 4 + 8 + 4 bytes=16, ok  
char *buffer=(char*) malloc(longObj);
memcpy(buffer,&obj,longObj);
grabarEnArchivo(buffer);

Lo que esperaba es que grabe esto, considerar que long long tiene 0 setado como valor, osea todos nulos en bytes:

Código:
hola[NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL]hola

Pero me quedo asi:

Código:
hola[NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL][NULL]hola

Vease que hay dos nulos de mas, tienen idea porque puede ser?

Muchas gracias
Saludos!




Título: Re: Long long to char
Publicado por: x64core en 5 Agosto 2013, 02:32 am
Luce como que es el alineamiento, que compilador utilizas?


Título: Re: Long long to char
Publicado por: Xedrox en 5 Agosto 2013, 02:54 am
Hola, uso c99.

Saludos!

P.D. Acabo de encontrar la forma de solucinar el problema, queria evitarlo pero estoy cargando el array byte por byte, por lo menos zafo con esta solucion.


Título: Re: Long long to char
Publicado por: amchacon en 5 Agosto 2013, 10:15 am
Sobrecarga el operador de conversión:

Código
  1. class Dummy
  2. {
  3.     public:
  4.          char mensaje[4];
  5.          long long valor;
  6.          char mensaje2[4];
  7.  
  8.          operator char*()
  9.         {
  10.             char Texto[8];
  11.  
  12.             for (short i = 0; i < 4;i++)
  13.             {
  14.                  Texto[i] = mensaje[i];
  15.                  Texto[i+4] = mensaje2[i];
  16.             }
  17.  
  18.             return Texto;
  19.         }
  20.  
  21. //...
  22.