Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-10-2010
bactering bactering is offline
Miembro
 
Registrado: jul 2006
Posts: 19
Poder: 0
bactering Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 01-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, ¿a qué te refieres exactamente con variables de 8 y 16 bits?
Responder Con Cita
  #3  
Antiguo 01-10-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Y que contienen esas variables?

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 02-10-2010
bactering bactering is offline
Miembro
 
Registrado: jul 2006
Posts: 19
Poder: 0
bactering Va por buen camino
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

Última edición por bactering fecha: 02-10-2010 a las 01:02:00.
Responder Con Cita
  #5  
Antiguo 04-10-2010
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
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.
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #6  
Antiguo 06-10-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #7  
Antiguo 06-10-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #8  
Antiguo 04-11-2010
bactering bactering is offline
Miembro
 
Registrado: jul 2006
Posts: 19
Poder: 0
bactering Va por buen camino
Gracias. Las soluciones me han resuelto el problema.
Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como ejecutar aplicativos dbExpress de 32 bits en 64 bits rolandoj Conexión con bases de datos 0 30-07-2010 20:39:07
BDE Win x64 bits Cristalero Conexión con bases de datos 1 16-11-2009 15:12:05
Aplicaciones de 32 bits en Windows de 64 bits Gabo Debates 9 25-09-2008 21:49:32
operaciones con bits pulpin C++ Builder 2 25-04-2008 22:14:57
Convertir un BMP de 24 Bits a 8 Bits TEO127 Gráficos 3 18-06-2007 18:58:19


La franja horaria es GMT +2. Ahora son las 01:52:39.


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
Copyright 1996-2007 Club Delphi