227 votos

Cómo convertir un int en cadena en C

¿Cómo se convierte un int (entero) a una cadena? Estoy tratando de hacer una función que convierte los datos de un struct en una cadena para guardarla en un archivo.

211voto

cnicutar Puntos 98451

Puede utilizar sprintf para hacerlo, o tal vez snprintf si lo tienes:

char str[ENOUGH];
sprintf(str, "%d", 42);

Donde el número de caracteres (más el carácter de terminación) en el str se puede calcular con:

(int)((ceil(log10(num))+1)*sizeof(char))

93voto

Alexander Galkin Puntos 4312

EDITAR: Como se señala en el comentario, itoa() no es un estándar, por lo que es mejor utilizar el método sprintf() sugerido en la respuesta rival.


Puede utilizar itoa() a la función convertir su valor entero a una cadena.

He aquí un ejemplo:

int num = 321;
char snum[5];

// convert 123 to string [buf]
itoa(num, snum, 10);

// print our string
printf("%s\n", snum);

Si desea imprimir su estructura en un archivo, no es necesario convertir ningún valor de antemano. Basta con utilizar la función especificación del formato printf para indicar la salida de sus valores y utilizar cualquiera de los operadores de familia printf para dar salida a sus datos.

30voto

David C. Rankin Puntos 2674

Después de haber mirado varias versiones de itoa para gcc, la versión más flexible que he encontrado que es capaz de manejar conversiones a binario, decimal y hexadecimal, tanto positivas como negativas es la cuarta versión que se encuentra en http://www.strudel.org.uk/itoa/ . Mientras que sprintf / snprintf tienen ventajas, no manejan números negativos para nada que no sea la conversión decimal. Como el enlace anterior está fuera de línea o ya no está activo, he incluido su 4ª versión a continuación:

char *
itoa (int value, char *result, int base)
{
    // check that the base if valid
    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 );

    // Apply negative sign
    if (tmp_value < 0) *ptr++ = '-';
    *ptr-- = '\0';
    while (ptr1 < ptr) {
        tmp_char = *ptr;
        *ptr--= *ptr1;
        *ptr1++ = tmp_char;
    }
    return result;
}

9voto

catfood Puntos 29

Esto es viejo pero aquí hay otra manera.

#include <stdio.h>

#define atoa(x) #x

int main(int argc, char *argv[])
{
    char *string = atoa(1234567890);
    printf("%s\n", string);
    return 0;
}

2voto

user2374601 Puntos 11

Si quieres dar salida a tu estructura en un archivo no hay necesidad de convertir ningún valor de antemano. Sólo tiene que utilizar la especificación del formato printf para indicar cómo dar salida a sus valores y utilizar cualquiera de los operadores de la familia printf para dar salida a sus datos.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X