elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles  (Leído 4,460 veces)
Sutano

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« en: 21 Agosto 2012, 03:38 am »

Hola a todos. Este es mi primer post en el foro elhacker.net

Por favor, necesito ayuda con el codigo base del siguiente problema:

Como programar en C++ un lazo que ciclicamente lee dos bytes (cada uno de estos bytes con valores entre 0 y 15), y convierte ambos bytes en un unico byte de 0 a 256, manipulando los dos bytes como nibbles.

Entiendo que debo desplazar 4 veces uno de los bytes y sumarlo al otro byte.
Por ejemplo, si los bytes son A=12 (00001100) y B=14 (00001110), deberia poder convertirlos en C = 206 (11001110) donde estan contenidos.

Gracias por adelantado,
Wilfredo
 


En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #1 en: 21 Agosto 2012, 13:40 pm »

Mira este post, fijate en las funciones be16, be32 y be64, y en la magnifica explicacion que me dio @Alex Mtx, creo que te sera util:  http://foro.elhacker.net/programacion_cc/ayuda_con_este_codigo-t368590.0.html

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #2 en: 21 Agosto 2012, 20:11 pm »

Hola Sutano.

Citar
Por ejemplo, si los bytes son A=12 (00001100) y B=14 (00001110), deberia poder convertirlos en C = 206 (11001110) donde estan contenidos.

Si no te entendí mal, podrías hacer:

Código
  1. ...
  2.  unsigned char A=12, B=14, C;
  3.  
  4.  C = A << 4 | B;  
  5. ...
  6.  

Saludos.
En línea

Sutano

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #3 en: 21 Agosto 2012, 21:18 pm »

Gracias Daniyo y Ecfisa. Tu propuesta, Ecfisa, es la solucion mas directa. Hasta ahora habia pensado en C= ( A<<4 ) + B. Pienso que tambien funciona. por cierto que tuve que resolver el caso contrario. Recuperar los nibbles del byte. Esto es lo que hice:

                B = (C >> 4)
                A = (C - ((C >> 4)<<4)

No lo he probado pero creo que para A es mas directo:
                A = C && 0x0F

Saludos
En línea

ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #4 en: 22 Agosto 2012, 05:04 am »

Hola Sutano.

Ejemplo:

Código:
#include <stdio.h>

int main(int argc, char* argv[]) {
 unsigned char hinibble = 0xE, lonibble = 0xC, BYTE;

  /* Nibbles a byte */
  BYTE = hinibble << 4 | lonibble;
    printf("%X\n",BYTE);

  /* Byte a nibbles */
  hinibble = BYTE >> 4;
  lonibble = BYTE & 0xF;
  printf("%X%X",hinibble, lonibble);

  getchar();
  return 0;
}

Saludos.
« Última modificación: 22 Agosto 2012, 14:23 pm por ecfisa » En línea

Sutano

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #5 en: 24 Agosto 2012, 05:12 am »

Gracias de nuevo ecfisa por el codigo. Con un codigo similar al tuyo, he optimizado el codigo existente en un pequeno sistema en el cual trabajo. Te anexo un video del sistema. Se trata de un control remoto por joystick de un robot Pololu 3pi usando modulos XBee. Actualmente trabajo en el codigo C del modulo microcontrolador MM51C2 de Bipom para eliminar la laptop que actualmente uso como puente.

http://www.youtube.com/watch?v=UmourpBmrLQ&feature=plcp

Saludos cordiales.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #6 en: 24 Agosto 2012, 05:58 am »

@ecfisa
Las mascaras 0xE, 0xC son erróneas...

Código
  1.  
  2. int fusion_nibble(int low, int upper) { // Solo nos interesan los bits por ello no importa si son unsigned o signed... tampoco nos interesan el tipo...
  3.    return (low & 0xF) | ((upper << 4) & 0xF0); // usamos las mascaras para no alterar valores...
  4. }
  5.  
  6. int main() {
  7.  
  8.    char a = 12, b = 14;
  9.  
  10.    printf("%d\n", (unsigned)fusion_nibble(b, a));
  11.    getchar();
  12.    return 0;
  13. }
  14.  
  15.  

Dulces Lunas!¡.
« Última modificación: 24 Agosto 2012, 07:51 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
ecfisa

Desconectado Desconectado

Mensajes: 114


Ver Perfil
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #7 en: 24 Agosto 2012, 07:35 am »

Hola BlackZeroX.

No utilizo los valores como máscaras, sino para inicializar las variables hinibble y lonibble (0xE = 14 y 0xC = 12).

Saludos.

Pd: Estaba editando,  pero fuí muy lento... (estoy medio verde con el editor) :-(  y respondiste primero ;D
« Última modificación: 24 Agosto 2012, 08:10 am por ecfisa » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles
« Respuesta #8 en: 24 Agosto 2012, 07:48 am »

ooo si perdón no se donde demonios vi un &...

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines