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.
Antworten
Zu viele Anzeigen?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.
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.
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;
}
- See previous answers
- Weitere Antworten anzeigen