 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
german Ens

Registrado: 16 Dic 2003Mensajes: 43
|
Publicado: Mar 16 Dic, 2003 4:33 pm Asunto: Funcion IntToHex.... |
|
|
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 |
|
 |
german Ens

Registrado: 16 Dic 2003Mensajes: 43
|
Publicado: Mar 16 Dic, 2003 5:39 pm Asunto: |
|
|
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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Mie 17 Dic, 2003 7:56 am Asunto: |
|
|
Si, es cierto. Ademas el archivo de cabecera iostream.h, no hace falta incluirlo tampoco.
Saludos.... |
|
| Volver arriba |
|
 |
german Ens

Registrado: 16 Dic 2003Mensajes: 43
|
Publicado: Jue 15 Ene, 2004 3:57 pm Asunto: |
|
|
Una cosita...que codigo necesitaria , para que admita mas de 10 digitos el resultado final...?
Gracias........ |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Jue 15 Ene, 2004 5:04 pm Asunto: |
|
|
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 |
|
 |
german Ens

Registrado: 16 Dic 2003Mensajes: 43
|
Publicado: Jue 15 Ene, 2004 5:17 pm Asunto: |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Jue 15 Ene, 2004 6:44 pm Asunto: |
|
|
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 |
|
 |
german Ens

Registrado: 16 Dic 2003Mensajes: 43
|
Publicado: Vie 16 Ene, 2004 8:37 am Asunto: |
|
|
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 |
|
 |
Dkr Invitado
|
Publicado: Dom 04 Abr, 2004 9:07 pm Asunto: |
|
|
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?  |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Dom 04 Abr, 2004 10:21 pm Asunto: |
|
|
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 |
|
 |
Dkr Cdt

Registrado: 04 Abr 2004Mensajes: 1
|
Publicado: Dom 04 Abr, 2004 11:22 pm Asunto: |
|
|
Enrique! 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!  |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|