Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Funcion IntToHex....

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Funcion IntToHex.... Responder citando

Muy bunas a todos. Soy nuevo en este foro y estoy empezando en este mundo del builder. Me encuentro con una gran duda que me lleva de cabeza.

Tengo que convertir en numero decimal en hexa y la funcion IntToHex no se como tengo que hacer para que me salga bien.

Hay dos TEdit, el primero recibe el numero decimal y con un boton de comando lo quiero cambiar a hexa, para que se represente en el segundo TEdit, pero no soy capaz. Alguien me podria echar una manita....

Gracias y saludos al foro.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

me respondo yo mismo...ejejejej con este poquito de codigo se hace:

tenemos dos TEdit en el primero el numero en decimal en el segundo el resultado en hex y un boton de comando que hace la conversion. Bueno el codigo del boton de comando es el siguiente:

int decimal;
decimal = atoi(txtDecimal->Text.c_str());
txtHexa->Text = IntToHex(decimal,2);

no acepta mas de 10 digitos en decimal, pero a mi me vale.
Ah otra cosa, hay que incluir el archivo de cabecera iostream.h

Saludos.......
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

En realidad podrias haberlo hecho un poco mas simple:

Código:
edtHexa->Text =  IntToHex(StrToInt(edtDecimal->Text),2);


Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Si, es cierto. Ademas el archivo de cabecera iostream.h, no hace falta incluirlo tampoco.
Saludos....
Volver arriba
Mensaje    Asunto: Responder citando

Una cosita...que codigo necesitaria , para que admita mas de 10 digitos el resultado final...?

Gracias........
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

AnsiString __fastcall IntToHex(int Value, int Digits);
AnsiString __fastcall IntToHex(__int64 Value, int Digits);


IntToHex convierte a un número en un string conteniendo la representación del número en hexadecimal (en base 16).

Value es el número a convertir. Digits indica el mínimo número de digitos hexadecimales a devolver.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

OK. Gracias ikis....jejeje estas en todas....

__int64 decimal;
decimal = atoi(txtDecimal->Text.c_str());
txtHexa->Text = IntToHex(decimal,2);

con este codigo, el txtHexa, que es donde reside el resultado final, se me trunca a partir de 10 caracteres...es decir un numero mas grande de 1234567891...ya se trunca el resultado, al convertirlo a hexa.

Como arreglo eso...?
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

El rango de un int, que es de 32 bits es de

-2,147,483,648 <= X <= 2,147,483,647

Con lo q no te alcanza y deberas usar un __int64 (de 64 bits)

__int64 i64 __int64 big = 12345654321i64; 64 bits


Una forma sería la siguiente

Código:

        Edit2->Text = IntToHex((__int64)Edit1->Text.ToDouble(),2);


Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Joder...ikis, eres un lince....jejejej...buenos dias. El casting que estas haciendo lo entiendo...lo he hecho de vez en cuando...sobre todo en los bucles for. Lo que me ha dejado descolocado por completo es lo de Text.ToDouble. No me imaginaba que se le pudiese pasar una funcion a una propiedad...de la forma que lo has echo?¿?¿?Todos los dias se aprende y este ha sido muy interesante.

Gracias ikis y saludos......
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Cheque el codigo para trasformar a Hexadecimal y funcionan perfectamente! =) , "PERO" me gustaria saber si alguno de ustedes tiene alguna rutina que convierta tambien los numeros punto flotante decimales
a Hexadecimal?

Alguna Sugerencia? Rolling Eyes
Volver arriba
Mensaje    Asunto: Responder citando

Hola, Dkr, no he visto nunca números en coma flotante en base hexadecimal ¿para qué los necesitas?

Una idea es: convierte su parte entera como sepas (dividiéndola sucesivamente entre 16 o usando la función IntToHex). Luego su parte decimal la construyes multiplicándola por 16 y quedándote con el resultado entero, cíclicamente, ahí va un ejemplo:

Supón que la parte decimal de tu número en base 10 es 0,329833984375:

0,329833984375 * 16 = 5,27734375

separas el 5, ahora tienes 0,27734375

0,27734375 * 16 = 4,4375

separas el 4, te queda 0,4375

0,4375 * 16 = 7

y como ya no queda parte decimal, la conversión es exacta:

0,329833984375 en base 10 se escribe 0,547 en base 16.

Ten en cuenta que la parte decimal podría no "terminar", prueba con el número 0,33 en base 10:

0,33 * 16 = 5,28
0,28 * 16 = 4,48
0,48 * 16 = 7,68
0,68 * 16 = 10,88
0,88 * 16 = 14,08
0,08 * 16 = 1,28
0,28 * 16 = 4,48
...

su representación hexadecimal sería: 0,547AE147AE147AE...

Otro problema que puedes tener es cuando el número que quieres representar es muy grande o muy pequeño: quizá su representación como "parte entera" + "parte decimal" no esté a tu alcance con números enteros. Bueno, tú verás cómo y dónde lo necesitas.

Suerte.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Enrique! Surprised Gracias por tu idea creo que ya tengo una idea mas clara de como hacerlo, gracias por tomarte tu tiempo para explicarme! Ahora a implementarlo! Mr. Green
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.