deschattenmann, ahi te dejo un codigo que hace lo que creo que entendi que querias
Igual fijate, cualquier error que veas no dudes en postearlo
/* by nicolas_cof bajo efectos de fernet ( http://es.wikipedia.org/wiki/Fernet ) */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *itoa( int value, char *result, int base )
{
if ( base < 2 || base > 36 )
{
*result = '\0';
return result;
}
char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value;
do
{
tmp_value = value;
value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
}
while ( value );
if ( tmp_value < 0 ) *ptr++ = '-';
*ptr-- = '\0';
while ( ptr1 < ptr )
{
tmp_char = *ptr;
*ptr--= *ptr1;
*ptr1++ = tmp_char;
}
return result;
}
int main( void )
{
char cad[] = "hola";
int i,
lencad = strlen( cad );
char *tmp[lencad];
char *cadnum;
unsigned long x;
cadnum = calloc( 25, sizeof( char ) );
for ( i = 0; i < lencad; ++i )
{
tmp[i] = calloc( 4, sizeof( char ) );
tmp[i] = itoa( cad[i], tmp[i], 10 );
cadnum = strncat( cadnum, tmp[i], strlen( tmp[i] ) );
}
x = atol( cadnum );
printf( "cadnum:%s | x:%ld | x + 10:%ld \n", cadnum, x, x + 10 );
for ( i = 0; i < lencad; ++i )
free( tmp[i] );
free( cadnum );
return 0;
}
http://www.strudel.org.uk/itoa/Otra version usando la funcion sprintf()
/* by nicolas_cof bajo efectos de fernet ( http://es.wikipedia.org/wiki/Fernet ) */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( void )
{
char cad[] = "hola";
int i,
lencad = strlen( cad );
char *tmp[lencad];
char *cadnum;
unsigned long x;
cadnum = calloc( 25, sizeof( char ) );
for ( i = 0; i < lencad; ++i )
{
tmp[i] = calloc( 4, sizeof( char ) );
sprintf( tmp[i], "%d", cad[i] );
cadnum = strncat( cadnum, tmp[i], strlen( tmp[i] ) );
}
x = atol( cadnum );
printf( "cadnum:%s | x:%ld | x + 10:%ld \n", cadnum, x, x + 10 );
for ( i = 0; i < lencad; ++i )
free( tmp[i] );
free( cadnum );
return 0;
}
Salu10.