• Lunes 16 de Diciembre de 2024, 00:42

Autor Tema:  Numeros En Base Hexadecimal Otra Vez  (Leído 1834 veces)

daniel83_dev

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
    • http://www.enlaceseguros.com
Numeros En Base Hexadecimal Otra Vez
« en: Domingo 19 de Junio de 2005, 02:49 »
0
Hola muchachos ... bueno anteriormente plantee mi duda acerca de como trabajar con numero hexadecimales en c++ ... yo les decia esto porque necesito esto para aplicarlos en la funcion outportb que requiere como argumentos la direccion del puerto y el valor en hexadecimal de dicho bit en formato de tipo char osea puede ser : :comp:

             Outportb(3f8,0x1f);

en mi programa yo tengo un numero en base decimal supongamos ... 31 (cuyo valor en hexa es 1f )y este valor lo tengo almacenado en una variable int ..... el problema es cuando quiero pasar este valor a dicha funcion, no se como hacerlo  :huh:  .... gracias.
[size=109]You can do it ... only if you want it[/size]

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Numeros En Base Hexadecimal Otra Vez
« Respuesta #1 en: Lunes 20 de Junio de 2005, 08:42 »
0
Volvemos de nuevo con el mismo problema de siempre.... LOS NÚMEROS DENTRO DEL ORDENADOR SE TRATAN COMO NÚMEROS EN FORMATO BINARIO, no tienes un entero en formato decimal ni uno en formato hexadecimal, octal, o lo que sea, los números se tratan en binario.  Los transistores del uprocesador tienen limitaciones y entre ellas están que sólo saben operar con 1s y 0s.  Espero que esto quede claro de una vez.
La función Outportb() recibirá dos valores que serán tipo int, float, char (en tu caso como dices tipo char)....  Esto es lo único que te tiene que interesar, pues si a la función antes mencionada le pasas el valor 31 como decías:
outportb(3f8,0x1f);
es igual a hacer lo siguiente:
outportb(3f8,31);
Al fin y al cabo a la función outportb le llegará el siguiente valor: 0001 1111, se lo pases en decimal o en hexadecimal.  El compilador de C te permite trabajar con números en decimal: a= 31, como en hexadecimal (si añades al principio el 0x): a=0x1f.  Pero esto sólo es una ayuda para el programador, para que pueda escribir su código bien usando notación decimal como hexadecimal, para hacer el código más sencillo para el programador, pero por dentro esos valores son números binarios y al programa le da exactamente igual que se los hayas pasado en hexadecimal o en decimal.
Tu programa se puede escribir de varias formas por tanto:
Código: Text
  1.  
  2. int valor;
  3. valor=0x1f; //se le pasa un valor en hexadecimal, aunque en valor se guardará 0001 1111
  4. outportb(3f8,(char)valor);
  5. valor=31;//en forma decimal, en valor se vuelve a guardar lo mismo de antes 0001 1111
  6. outportb(3f8,(char)valor);//se hace exactamente lo mismo que antes
  7.  
  8. outportb(3f8,31);//hace lo mismo
  9. outportb(3f8,0x1f);//de nuevo se hace lo mismo que antes
  10.  
  11.  
Como conclusión, da igual con qué tipo de números trabajes cuando escribes un código (decimal o hexadecimal) porque a la hora de la verdad el programa trabajará con los números en formato binario, y por tanto da igual que a una función le pases el número en uno u otro formato, siempre lo recibirá en binario.
Deja de darle vueltas al decimal y al hexadecimal.
Una última cosa, en el programa estás trabajando con una variable tipo int que ocupa 32bits, y la función outportb() recibe una variable de tipo char de 8 bits(según dices), así que ten cuidado con el valor que introduces pues tiene que estar en el rango de 0 a 255, de esta manera podrás hacer el cast sin problemas de pérdida de datos.
Un saludo  :lightsabre:
No hay tonto más molesto que el ingenioso.