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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Algoritmo alterno a itoa?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Algoritmo alterno a itoa?  (Leído 3,015 veces)
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
¿Algoritmo alterno a itoa?
« en: 15 Mayo 2016, 00:18 am »

Muy buen dia.

Tengo entre manos el siguiente problema.

Tengo en memoria un buffer que contiene números de gran longitud, puedo sumarlos, restarlos, dividirlos etc.

Ahora necesito imprimirlos en formato decimal, actualmente solo tengo forma de visualizarlos en formado hexadecimal.

ejemplo:

Código:
numero 1: 0000000000000020a7c0a09f032703
numero 2: 00000000000000000000000000000021a45141d6351f
numero 3: 00000000000000001ed31c62dfa50b
numero 4: 00000000000000000000000000000044b5f2b7695b70
numero 5: 00000000000000000040ab08571d224107
numero 6: 000000000000000000000000000000003ac807630f6218
numero 7: 00000000000000000000000072b11568f28c2a
numero 8: 000000000000000000000000000000000000607fe65ec43bdf

Numeros en Little Endian.


Lo anterior lo hago solo imprimiendo byte a byte en hexadecimal.

La pregunta aqui es.. ¿debo de busca el algoritmo ya hecho para convertir de entero a "Cadena Decimal" usado por itoa?

O recomiendan algun otro algoritmo que sea mas adecuado para números largos, repito el numero ya lo tengo en memoria y es de N cantidad de bits

El algoritmo itoa es el siguiente:

http://opensource.apple.com//source/groff/groff-10/groff/libgroff/itoa.c

y al aprecer no funciona para numeros como el que tengo.

Código
  1. #define INT_DIGITS 19 /* enough for 64 bit integer */
  2.  
  3. char *itoa(i)
  4.     int i;
  5. {
  6.  /* Room for INT_DIGITS digits, - and '\0' */
  7.  static char buf[INT_DIGITS + 2];
  8.  char *p = buf + INT_DIGITS + 1; /* points to terminating '\0' */
  9.  if (i >= 0) {
  10.    do {
  11.      *--p = '0' + (i % 10);
  12.      i /= 10;
  13.    } while (i != 0);
  14.    return p;
  15.  }
  16.  else { /* i < 0 */
  17.    do {
  18.      *--p = '0' - (i % 10);
  19.      i /= 10;
  20.    } while (i != 0);
  21.    *--p = '-';
  22.  }
  23.  return p;
  24. }
  25.  

Saludos


« Última modificación: 15 Mayo 2016, 00:20 am por AlbertoBSD » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿Algoritmo alterno a itoa?
« Respuesta #1 en: 15 Mayo 2016, 00:45 am »

Buscas un algoritmo sin más, o uno especialmente eficiente?
Si buscas uno cualquiera, en C++ sería este uno:
Código
  1. string toDec(Num n){
  2. if(n==0)
  3. return "0";
  4. bool isNegative = n<0;
  5. string str;
  6. while(n>0){
  7. str = (n%10)+'0';
  8. n /= 10;
  9. }
  10. return (isNegative?"-":"")+str;
  11. }


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Algoritmo alterno a itoa?
« Respuesta #2 en: 15 Mayo 2016, 01:29 am »

Gracias, buscaba ideas o ver si habia alguno para numeros de N bits pero al parecer tendre que hacerlo como comentas con modulos y divisiones entre 10, usando las funciones que ya tengo de modulo y división.

Saludos
En línea

Stakewinner00


Desconectado Desconectado

Mensajes: 1.426



Ver Perfil WWW
Re: ¿Algoritmo alterno a itoa?
« Respuesta #3 en: 15 Mayo 2016, 01:37 am »

estaba pensando que en C++ existe la funcion to_string() para pasar un decimal a string, y parece que usa vsnprintf. Igual puedes probar a hacer algo con vsnprintf para convertirlo

Olvide que si son tipos propios no se podrá hacer...

« Última modificación: 15 Mayo 2016, 01:42 am por Stakewinner00 » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Algoritmo alterno a itoa?
« Respuesta #4 en: 15 Mayo 2016, 05:36 am »

estaba pensando que en C++ existe la funcion to_string() para pasar un decimal a string, y parece que usa vsnprintf. Igual puedes probar a hacer algo con vsnprintf para convertirlo

Olvide que si son tipos propios no se podrá hacer...


Si conozco esas funciones, snprint me ayuda mucho para depurar :)

y claro es un tipo propio, el cual describo en el post:

Números de longitud variable en C (Numeros muy grandes)

Y si voy a tomar el algoritmo existente de itoa y adaptarlo a mi tipo de dato.

Saludos!
« Última modificación: 15 Mayo 2016, 05:41 am por AlbertoBSD » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
funcion ITOA
Programación C/C++
mapers 1 5,146 Último mensaje 27 Diciembre 2010, 06:18 am
por [L]ord [R]NA
dime el algoritmo que más te gusta... ejm:algoritmo del avestruz
Programación General
jhonatanAsm 0 4,708 Último mensaje 13 Mayo 2011, 01:30 am
por jhonatanAsm
atoi + itoa personalizadas
Programación C/C++
david_BS 2 3,392 Último mensaje 7 Abril 2012, 10:40 am
por david_BS
Algoritmo Flamel 49152 y Algoritmo Flamel 98304 - los 2 Trabajan en Paralelo
Criptografía
ELIAS EL INMORTAL 2 4,355 Último mensaje 29 Diciembre 2012, 02:06 am
por ELIAS EL INMORTAL
ATOI + ITOA remake « 1 2 »
Programación C/C++
85 12 10,418 Último mensaje 27 Febrero 2013, 19:45 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines