396 Stimmen

Wie konvertiert man in C einen int in einen String?

Wie konvertiert man eine int (Ganzzahl) in eine Zeichenkette? Ich versuche, eine Funktion zu erstellen, die die Daten einer struct in eine Zeichenkette, um sie in einer Datei zu speichern.

402voto

cnicutar Punkte 173420

Sie können verwenden sprintf um es zu tun, oder vielleicht snprintf wenn Sie es haben:

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

Wobei die Anzahl der Zeichen (plus abschließendes Zeichen) in der str kann mit berechnet werden:

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

173voto

Alexander Galkin Punkte 11438

EDITAR: Wie in dem Kommentar hervorgehoben, itoa() ist kein Standard, verwenden Sie daher besser den in der konkurrierenden Antwort vorgeschlagenen sprintf()-Ansatz!


Sie können verwenden itoa() Funktion zu konvertieren Ihren Integer-Wert in eine Zeichenkette um.

Hier ist ein Beispiel:

int num = 321;
char snum[5];

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

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

Wenn Sie Ihre Struktur in eine Datei ausgeben wollen, müssen Sie keinen Wert vorher umrechnen. Sie können einfach die Spezifikation des printf-Formats um anzugeben, wie Ihre Werte ausgegeben werden sollen, und verwenden Sie einen der Operatoren aus printf-Familie um Ihre Daten auszugeben.

161voto

user2622016 Punkte 5508

Die kurze Antwort lautet:

snprintf( str, size, "%d", x );

Je länger, desto besser: Zuerst müssen Sie die ausreichende Größe herausfinden. snprintf sagt Ihnen die Länge, wenn Sie es mit NULL, 0 als erste Parameter:

snprintf( NULL, 0, "%d", x );

Ein Zeichen mehr für Null-Terminator zuweisen.

#include <stdio.h> 
#include <stdlib.h>

int x = -42;
int length = snprintf( NULL, 0, "%d", x );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%d", x );
...
free(str);

Funktioniert für jeden Formatstring, so dass Sie Float oder Double in String konvertieren können, indem Sie "%g" können Sie int in hex konvertieren, indem Sie "%x" , und so weiter.

45voto

David C. Rankin Punkte 75069

Nachdem ich mir verschiedene Versionen von itoa für gcc angesehen habe, ist die flexibelste Version, die ich gefunden habe und die in der Lage ist, Konvertierungen in binär, dezimal und hexadezimal, sowohl positiv als auch negativ, durchzuführen, die vierte Version, die man unter http://www.strudel.org.uk/itoa/ . Während sprintf / snprintf Vorteile haben, können sie keine negativen Zahlen für etwas anderes als die Dezimalumrechnung verarbeiten. Da der obige Link entweder offline oder nicht mehr aktiv ist, habe ich die 4. Version unten eingefügt:

/**
 * C++ version 0.4 char* style "itoa":
 * Written by Lukás Chmela
 * Released under GPLv3.
 */
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;
}

13voto

catfood Punkte 429

Das ist zwar alt, aber hier ist eine andere Möglichkeit.

#include <stdio.h>

#define atoa(x) #x

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X