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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda en conversion de 24 bits a 32 bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda en conversion de 24 bits a 32 bits  (Leído 4,033 veces)
armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Duda en conversion de 24 bits a 32 bits
« en: 22 Enero 2012, 23:53 pm »

Hola pues tengo aqui una pequeña duda, que a pesar de buscar en internet en miles de paginas (cortesia de google) no he podido solucionar. Es un pequeño dilema que me he ganado por el tema del endianness. Pues quiero convertir un entero de 24 bits a uno de 32 ya que estoy trabajando con el LBA para el acceso a las unidades de discos soportadas por ATA/ATAPI e IDE. Partimos de la base de que ya tengo separados en bytes el entero. Bueno, dentro de la etiqueta 'code' esta lo que he entendido buscando informacion. De antemano, gracias.
Código:
// Inicialmente tengo el numero 0xA0B0C0 el cual es de 24 bits.
// Las i386 y superiores son little endian por lo que un esquema de bytes queda asi
// Byte 3 | Byte 2 | Byte 1
// C0     | B0     | A0
// Y debo convertirlo a su equivalente de 32 bits el cual debiese ser asi
// Byte 4 | Byte 3 | Byte 2 | Byte 1
// C0     | B0     | A0     | 00
// ¿Es correcto el esquema?
// En tal caso, esta correcto el código?
word lba_conv(byte b1, byte b2, byte b3)
{
word val = 0;
val = val | b1;
val = val << 8;
val = val | b2;
val = val << 8;
val = val | b3;
}
Gracias a todos. Saludos


En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Duda en conversion de 24 bits a 32 bits
« Respuesta #1 en: 23 Enero 2012, 00:21 am »

Hasta donde yo se un numero por decir uno el "24" en un int de 8, 16, 24, 32 y 64 SIEMPRE tendran los mismos bits encendidos.

Prueba estas funciones que te arme

Código
  1. typedef int INT32;  //  Entero de 4 bytes...
  2. typedef int INT24;  //  Deberian ser 3 bytes... de manera auxiliar pongo un int de 4 bytes...
  3.  
  4. INT32 int24To32(INT24 i24)
  5. {
  6.    INT32 i32Ret = (0x7fffff & i24); // Esta mascara la implemente por que ahorita en este codigo INT24 es de 32 bits (la estoy emulando).
  7.    return (i24 & 0x800000) ? (0x800000 | i24) : i24;
  8. }
  9.  
  10. INT24 int32To24(INT32 i32)
  11. {
  12.    INT24 i24Ret = (0x7fffff & i32); // Esta mascara es para obtener los 3 bytes menos significativos que corresponden a un entero de 24 bits.
  13.    //  la "e" es para ignorar el bit que se supone es para el bit de signo (el que corresponde) para el entero de 24 bits... en este caso
  14.    //  omitimos este y lo dejamos en 0, y verificamos si el bit de signo del entero de 32 esta encendido para encenderlo en el entero de 24 bits.
  15.    return (i32 & 0x80000000) ? (0x800000 | i32) : i32;
  16. }
  17.  

Edito:

Aclaración: las funciones son para Dezplazar el signo y poner en donde corresponde el bit de signo... en tal caso que no quieras desplazarlo solo debes aplicar mascaras:

entero24 =  0xffffff & entero32;

entero32 = entero24;

Dulces Lunas!¡.


« Última modificación: 23 Enero 2012, 07:04 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Duda en conversion de 24 bits a 32 bits
« Respuesta #2 en: 23 Enero 2012, 00:58 am »

Ohhh gracias pero una pregunta... los enteros que estoy usando son sin signos, las mascaras para no desplazar el signo valen no? Gracias
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Duda en conversion de 24 bits a 32 bits
« Respuesta #3 en: 23 Enero 2012, 01:35 am »

Si son sin signo entonces usa las mascaras e ignora las funciones...

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

The Dark Shadow is my passion.
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Duda en conversion de 24 bits a 32 bits
« Respuesta #4 en: 23 Enero 2012, 01:49 am »

@BlackZeroX:
 :huh:
el binario del EFFFFF es:
1110 1111 1111 1111 1111 1111

y como se supone que son 24 bits entonces el signo no seria el bit 24? :P
En línea

armizh

Desconectado Desconectado

Mensajes: 187

His brain caught in a hole...


Ver Perfil WWW
Re: Duda en conversion de 24 bits a 32 bits
« Respuesta #5 en: 23 Enero 2012, 03:20 am »

@BlackZeroX:
 :huh:
el binario del EFFFFF es:
1110 1111 1111 1111 1111 1111

y como se supone que son 24 bits entonces el signo no seria el bit 24? :P
Pero eso no importa mucho xd finalmente eran enteros sin signo por lo que no influye.
Si son signo entonces usa las mascaras e ignora las funciones...

Dulces Lunas!¡.
Gracias, me imaginaba eso. Muchisimas gracias. Saludos
En línea

Visita mi blog:
http://armizh.10h.us/
Fnx, fork de FreeNOS:
Código
  1. git clone https://github.com/armizh/Fnx
Hamster, Entorno Integrado de Desarrollo C/C++:
Código
  1. git clone https://github.com/armizh/Hamster
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Duda en conversion de 24 bits a 32 bits
« Respuesta #6 en: 23 Enero 2012, 07:03 am »

Si perdon en lugar de 0xefffff es 0x7fffff en las funciones... pero no importa (en el problema del creador de este hilo) en lo que va a hacer el tiene que hacer esta mascara 0xffffff

Dulces Lunas!¡.
« Última modificación: 23 Enero 2012, 07:05 am por BlackZeroX (Astaroth) » 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