Autor
|
Tema: Convertir dos bytes menores de 16 en un byte que los contenga como nibbles (Leído 4,484 veces)
|
Sutano
Desconectado
Mensajes: 10
|
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
Mensajes: 1.077
|
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.htmlSaludos.
|
|
|
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
Mensajes: 114
|
Hola Sutano. 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: ... unsigned char A=12, B=14, C; C = A << 4 | B; ...
Saludos.
|
|
|
En línea
|
|
|
|
Sutano
Desconectado
Mensajes: 10
|
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
Mensajes: 114
|
Hola Sutano. Ejemplo: #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
Mensajes: 10
|
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=plcpSaludos cordiales.
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
@ecfisaLas mascaras 0xE, 0xC son erróneas... 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... return (low & 0xF) | ((upper << 4) & 0xF0); // usamos las mascaras para no alterar valores... } int main() { char a = 12, b = 14; printf("%d\n", (unsigned)fusion_nibble (b , a )); return 0; }
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
Mensajes: 114
|
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
|
|
« Última modificación: 24 Agosto 2012, 08:10 am por ecfisa »
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
ooo si perdón no se donde demonios vi un &...
Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
jasperReport error: Byte no válido 1 de la secuencia UTF-8 de 1 bytes
Java
|
mgc
|
0
|
5,002
|
14 Noviembre 2014, 13:47 pm
por mgc
|
|
|
Como convertir un numero a binario y usar nibbles.
ASM
|
Castiel
|
2
|
3,742
|
10 Agosto 2015, 07:54 am
por Castiel
|
|
|
Suma byte a byte con acarreo en variable de 2 bytes
Programación C/C++
|
AlbertoBSD
|
2
|
4,023
|
18 Mayo 2016, 18:21 pm
por AlbertoBSD
|
|
|
leer datos de comunicacion serial (BYTE) de indicador de peso y convertir a int
« 1 2 3 »
Programación C/C++
|
pedromigl010
|
22
|
12,328
|
3 Julio 2016, 17:42 pm
por pedromigl010
|
|
|
Convertir Cadena Hex a Bytes y compararlos Con Bytes de un archivo
.NET (C#, VB.NET, ASP)
|
**Aincrad**
|
3
|
2,818
|
14 Octubre 2018, 00:52 am
por Eleкtro
|
|