Die Konvertierung von char* zu int
Mein code nicht und gibt eine wirklich große Nummer:
#include <stdio.h>
int main()
{
char *s = "hello123";
printf("%d\n",*(int *)s);
return 0;
}
mit atoi es gibt 0 zurück, irgendwelche Ideen?
Was ich versuche zu erreichen ist:
zum Beispiel im Versand "hello123", um eine server-software, server-software, sollte sich die "123" die numerische in string, dies zu tun, indem Sie diese Methode:
uint16_t get_uint16(NetworkMessage *message)
{
uint16_t ret = 0;
if (!message || !message->buffer)
return 0;
ret = *(uint16_t *)(message->buffer + message->position);
message->position += sizeof(uint16_t);
return ret;
}
was sind Sie eigentlich versucht zu erreichen?
Welche Ausgabe erwartest du???
warum
versucht man die "123" - position in meinem Netzwerk-Nachricht (in einem anderen Programm)
ich erwarte von 123...
Welche Ausgabe erwartest du???
warum
*(int *)s
? Erklären Sie es.versucht man die "123" - position in meinem Netzwerk-Nachricht (in einem anderen Programm)
ich erwarte von 123...
InformationsquelleAutor | 2011-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies setzt Voraus, dein string hat zwei Teile, der erste indeces holding chars (zB
hello
) und die letzten indeces holding die Zahl (zB123
). Von dem, was ich verstehe, aus Ihren Kommentaren ist dies, was Sie tun wollte.Nach Bearbeiten : Versuchen Sie, die? Ich gehe davon aus
message_buffer
enthält Ihre Nachricht und ist vom Typchar*
was ist der genaue Inhalt
message->buffer
?@Muggen: "hello123"
fixed, danke, ive gewählt, den Sie akzeptiert Ihre Antwort!
oops, ich hatte einen Fehler code. hinzufügen eines
-1
auf diestrlen()
Zeile plz.InformationsquelleAutor Muggen
Dein code nicht tut, was Sie denken, es tut. Sie können nicht konvertieren Sie text in eine Zahl um und erwarten Sie, um herauszufinden, welche zahlen, die Sie wollen.
Ein string ist ein array von Zeichen, die jeweils einen ASCII-Wert. Von casting zu
(int*)
wird, wird der ASCII-Wert des ersten 4 Zeichen (4 bytes zu einem int) und erstellt eine riesige Zahl heraus.In deinem Beispiel die ASCII-Werte der ersten 4 Zeichen sind
{ 0x68, 0x65, 0x6c, 0x6c }
. Jetzt kehren Sie die Reihenfolge für little-endian-Systeme zu{ 0x6c, 0x6c, 0x65, 0x68 }
. Kombinieren Sie diese in0x6c6c6568
. Umwandlung von dezimal ist1,819,043,176
. Das ist die Nummer, die Sie erhalten in Ihrem output.Wenn Sie wollen einfach nur die 123 verwenden Sie die clever-string-parsing analysiert die
hello
, und verwenden Sie dannatoi()
auf die übrigen.InformationsquelleAutor jonescb
Müssen Sie
atoi(s)
.In Ihrem code, Sie sind casting-string Zeiger auf integer-Zeiger, Lesen ersten vier bytes von einem string als einige große Ganzzahl.
int atoi(char*)
wird eine richtige Analyse, Rückkehr der integer-Wert.Parsen "hello123" es wird aufhören, auf den ersten nicht numerischen Zeichen, und geben 0 zurück. Überspringen Sie nicht numerische Zeichen, Tests mit
int isdigit(char)
:InformationsquelleAutor Goran Rakic
Alle anderen, ist absolut richtig. Sie können nicht konvertiert ein Zeichen-array in eine Ganzzahl durch die Verwendung eines cast. Es funktioniert nicht so. In C, chars werden durch Integer repräsentiert. Wenn Sie schreiben:
Was Sie bekommen ist ein array mit einer Reihe von Zeichen. Könnte man gleich schreiben:
So, wenn Sie anrufen
printf("%d\n",*(int *)s);
, was man tut, ist, Gießen Sie die Speicher-Adresse des Zeichen-array in einen Zeiger auf eine Ganzzahl. Du bist dann mit dem Inhalt dieses integer und drucken. Ich bin mir ziemlich sicher, dass das Ergebnis, das Sie bekommen wird, hängt von der system Sie verwenden, aber es ist definitiv nicht das, was Sie wollen.Was Sie wahrscheinlich tun möchten, ist dieser:
InformationsquelleAutor LandonSchropp