Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Pasar varible de 16 bits a dos de 8 bits (https://www.clubdelphi.com/foros/showthread.php?t=70141)

bactering 01-10-2010 20:34:52

Pasar varible de 16 bits a dos de 8 bits
 
Hola compañeros
La cabeza, a ciertas edades, sirve para llevar sombrero. El problema es que no recuerdo como se hace para cargar en dos varibles de 8 bits una de 16. Ya se que es lo más sencillo que hay pero no lo recuerdo y cuanto más busco peor. Por eso he tirado de vosotros. Gracias
Pd he tirado del buscador pero no he tenido suerte

Casimiro Notevi 01-10-2010 21:22:38

Hola, ¿a qué te refieres exactamente con variables de 8 y 16 bits?

marcoszorrilla 01-10-2010 21:38:57

Y que contienen esas variables?

Un Saludo.

bactering 01-10-2010 23:54:48

Lo dicho del sombrero..jeje si no fuese por las orejas se me caeria.

Tengo una variable int y quiero pasarla a dos unsigne char.
Es decir poder manipular de 8 en 8 bits la variable int

int contador= 2000;
unsigne char menos_peso = 8bits de menos peso de contador
unsigne char medio_peso = 8 bits de mas peso de contador

En CCs, compilador de pic, lo hago:

menos_peso = make8(converter,0) ;
medio_peso = make8(converter,1);

Recuerdo que se puede hacer tambien con el c++ de builder pero no recuerdo como.
Gracias por vuestras prontas respuestas.

PD Tambien me he dado cuenta que ha ido a parar a microcontroladores y queria ponerlo en builder. no pasa na ahi se queda como hacerlo con los micros. Resaludos

defcon1_es 04-10-2010 10:07:32

Hola.
En delphi existen 2 funciones para ello: SYSTEM.HI y SYSTEM.LO
Supongo que en C++ también están.

Extracto de la ayuda integrada:

function Hi(X: Integer): Byte;

Returns the high-order byte of X as an unsigned value.


In Delphi code, use Hi to obtain the high-order byte of an expression of type Word or Integer.
Note: Hi treats Integer as a 16-bit value, even if it is 32-bit.

escafandra 06-10-2010 00:34:44

En primer lugar se debe aclarar que un int en un entorno de procesador de 32 bits, ocupa 32 bits y no 16. Quizás lo adecuado sea hablar de un WORD o un short int que si son de 16 bits.
Un int podríamos usarlo si su valor no supera 65535 ó 0xFFFF.

Entonces la solución pasa por la aritmética binaria y desplazamientos.

Código:

WORD W = 1234;  // un valor...
BYTE  BH = W>>8; // Desplazo a la derecha 8 bits
BYTE  HL = W & 0x00FF; //Elimino la parte alta con un and binario

Saludos.

escafandra 06-10-2010 08:43:34

Otra forma de conseguirlo es usando uniones:

Código:

  typedef  union{
      struct{
        BYTE L;
        BYTE H;
      }B;
      WORD HL;
    } WData;

  WData HL;
  HL.HL= 0xAABB;
  // HL.B.H Contiene la parte alta
  // HL.B.L Contiene la parte baja

También se podría implementar con una clase...


Saludos.

bactering 04-11-2010 04:44:33

Gracias. Las soluciones me han resuelto el problema.
Saludos


La franja horaria es GMT +2. Ahora son las 23:01:46.

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