Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Duda convertir de int a char array (https://www.clubdelphi.com/foros/showthread.php?t=73363)

mizzard 16-04-2011 20:21:46

Duda convertir de int a char array
 
Hola a todos, os pongo en situación:

Resulta que quiero pasar un int a un array de char para enviar por una trama, me explico:

Si el int <256

michar[0]=0x00;
michar[1]= (char)miint;

ahora viene el problema, cuando el int>=256, ya que me gustaria hacer lo siguiente:

si por ejemplo tengo que el int es 256, sabemos que en hexadecimal es 0x0100, por lo que yo quiero poner:

michar[0]=0x01; parte alta
michar[1]=0x00; parte baja

Veo que es algo sencillo pero no me aclaro, me podeis echar una ayudita?

Muchas gracias!

ecfisa 16-04-2011 23:41:00

Hola mizzard.

Te pongo un ejemplo:
Código:

unsigned char v[100];
unsigned short int i= 0, n= 1023;

  if (n < 256){
    v[i++] = 0;
    v[i++] = n;
  }
  else {
    v[i++] = n & 0xFF;
    v[i++] = n >> 8;
  };

Pero utilizando unsigned char y unsigned short int y no char e int por que, char: 8bits (-128 a 127) e int: 32 bits (-2,147,483,648 a 2,147,483,647)

Un saludo.

mizzard 17-04-2011 11:04:40

Muchisimas gracias por la respuesta... ahora me surge otra duda... como podria hacer el caso contrario? Es decir, basándome en el ejemplo:

pasar de unsigned char michar[2] a unsigned short int?

Hay que tener en cuenta donde se almacena la parte alta y la parte baja

Ejemplo:

michar[0]=0x01 // parte alta
michar[1]=0x2c // parte baja

Resultado:

miint=300

mizzard 17-04-2011 11:14:47

Jeje, ya lo he resuelto, expongo mis conclusiones:

PARA PASAR DE unsigned short int a unsigned char[2]
-------------------------------------------------

if (miint< 256){
michar[i++] = 0;
michar[i++] = miint;
}
else {
michar[i++] = miint >> 8;
michar[i++] = miint & 0xFF;
}

PARA PASAR DE unsigned char[2] unsigned a short int
-------------------------------------------------

miint |= michar[0] & 0xFF;
miint <<= 8;
miint |= michar[1] & 0xFF;

hay que tener en cuenta que el num máximo será: 65535

Muchas gracias a ecfisa por su colaboración

Un saludo!


La franja horaria es GMT +2. Ahora son las 21:24:00.

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