Wie konvertieren von int zu char/string und Umgekehrt in linux(gcc)?
Möchte ich wissen, die Methode der Umwandlung eines integer in char/string und Umgekehrt auch.
Habe ich schon benutzt sprintf(&charvar,"%d",&intvar), aber es erzeugt die falsche Ausgabe, möglicherweise Müll.
ich habe auch gehört, dass atoi() in gcc-bugs hat.Referenz:GCC atoi bug
Was ist die andere Methode zum konvertieren von string/char zurück zu int ?
Eigentlich will ich senden Sie eine Ganzzahl von einem Computer zu einem anderen mit SOCK_STREAM .
//EDIT : ich habe vergessen zu sagen, dass die sprintf () - Konvertierung und gibt positiven Wert.
Ich würde nicht sagen, dass ein "Fehler", es ist nur eine Einschränkung der int-Typ. Wenn Sie brauchen, um überläufe vermeiden, validieren Sie die Eingabe-Länge vor der Verwendung
atoi
.InformationsquelleAutor SP Sandhu | 2011-07-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, senden Sie eine Ganzzahl, um eine andere Maschine, die Sie senden können, die als binäre Daten, die nur durch die übersendung der
intvar
direkt auf den stream, Sie müssen nicht konvertieren es in ein char-ersten. Das wird nur zu Problemen führen, mit dem wissen, die Länge der Daten, verschiedene Werte erzeugen unterschiedliche Längen der Saiten.Ja, fast:
send(socket_file_desc, &intvar, sizeof(int), 0)
.send
nimmt die Adresse der Daten zu senden, nicht den Wert direkt ein.und wie bekommst es dann ? Ich bin mit FILE *fp = fdopen(socket_file_desc,"r"); char c; c=fgetc(fp); auf der client-Seite
Sollten Sie verwenden
recv(socket_file_desc, &intvar, sizeof(int), 0)
erhalten Sie direkt in einer integer-variable. Es gibt eine kleine Möglichkeit, dass Sie nicht erhalten die volle integer sondern nur ein Teil davon, so überprüfen Sie, dass der zurückgegebene Wert ist gleichsizeof(int)
.Thompson: ja, es würde. Um dies zu korrigieren mit der Portabilität und Fehlerbehandlung daran, es muss verlängert werden, eine ganze Menge.
InformationsquelleAutor Anders Abel
Bitte Lesen Sie das Handbuch 'sprintf' und 'sscanf', und vielleicht sogar sicherer-Versionen sind richtige für Sie.
InformationsquelleAutor Stan
Entfernen Sie das kaufmännische und vor
intvar
:Zwei Hinweise:
&charvar
ist der richtige Typ, der es wahrscheinlich nicht.snprintf
den Vorzug zusprintf
.Hier einige Beispiel-code:
InformationsquelleAutor NPE
Können Sie nicht
sprintf
auf eine variable. Sie brauchen einen Puffer, weil der möglich mehrere Ziffern und die null zu schleppen. Außerdem, das argument sollte die int-variable, nicht seine Adresse.Beispiel:
(Puffer werden gefüllt mit '4', '2' und dem abschliessenden '\0').
InformationsquelleAutor Vlad
Ihre sprintf falsch ist.Sie sollten schreiben sprintf(string,"%d",integer);
Wenn Sie möchten, senden Sie eine Ganzzahl über das Netzwerk, und das ist, warum Sie wollen, es zu konvertieren in Zeichenfolge haben Sie einen Blick auf htons
mit diesen Funktionen können Sie konvertieren von integer in Netzwerk-format und vermeiden Sie verschiedene endian Probleme!
Wenn Sie nur wollen, es zu konvertieren, um bytes, die Sie tun können, so etwas wie dieses:
Wenn Sie wollen Ihrem string, um den Wert der int, dann sollten Sie verwenden, sprintf.
InformationsquelleAutor nikosdi