char in int konvertieren
-
Hallo,
ich habe ein char-Array, in das ich byteweise einlese.
1 //was kommt als nächstes (quasi eine Art ID) 4 //wie lang ist es text //die nächste info an sich 2 //was kommt als nächstes (quasi eine Art ID) 1 //wieviele Zahlen kommen? 81809 //die zahl an sich //...Nun möchte ich den Text und die Zahlen voneinander trennen - die Zahlen (zB 81809) sollen dann in einen Integer geschrieben werden. Mir gehts jetzt um die Konvertierung von char nach int. Ich habe es schon mit static_cast versucht, was mir meine Zahlenfolge im Puffer ungefähr so dargestellt hat:
0buf: 2 1buf: 0 2buf: 0 3buf: 0 4buf: 1 5buf: 0 6buf: 0 7buf: 0 8buf: -111 9buf: 63 10buf: 1 11buf: 0Ich würde gerne atoi vermeiden, da es eine C-Funktion ist. Klar sagt Ihr jetzt, benutz doch gar nicht erst char - würde ich ja gerne machen, aber ich denke, dass es nicht geht. Ich lese per recv() (Winsock) Daten ein und möchte sie halt erstmal in einem großen Empfangsbuffer speichern.
..naja, soweit erstmal, ich hoffe, ihr könnt mir helfen entweder zu casten oder indem ihr eine bessere Möglichkeit seht, wo ich meine empfangenen Daten zwischenspeichern kann...Danke im Voraus!
-
Du musst wissen wieviel Bytes in deinem Array jeweils die Zahlen ausmachen. Diese Bytes nimmst du und bastelst dir daraus dein Integer...
-
Du kannst ja mal nach Stringstreams und Umwandlung von Zahlen googlen. Hier ist vielleicht was brauchbares: http://titanos.de/iso-c++/cpp:str2num . Wobei du an einen char* mit std::string::c_str() kommst.
Ich habe es schon mit static_cast versucht
(ohne Worte)
PS: Was ich bei fast jedem Post schreiben koennte: Es ist unklar, was du machen willst.
-
knivil schrieb:
PS: Was ich bei fast jedem Post schreiben koennte: Es ist unklar, was du machen willst.
Findest du? Vielleicht lieg ich ja falsch, aber ich glaube er bekommt einen Datenstrom, über einen Socket, und will dort die Daten wieder auslesen.
-
Es ist unklar, was du machen willst.
81809 (aus dem char buffer) soll in eine integer variable gespeichert werden. Ich will nicht frech sein, aber meiner Meinung nach kann man das aus meinem Post herauslesen.
Stringstreams kenne ich übrigens, die würden mein Problem allerdings nicht lösen, es würde nur anders aussehen.@David_pb: Ja, das mit den Bytes ist so eine Sache, weil ich nicht immer genau sagen kann, wie viele Bytes meine Zahl genau einnimmt. Gibt es eine Möglichkeit das herauszufinden? Wahrscheinlich nur, wenn ich hinter jede Zahl selbst eine Kennung setze um die einzelnen Werte auseinander zu halten..?!
-
David_pb schrieb:
...ich glaube er bekommt einen Datenstrom, über einen Socket, und will dort die Daten wieder auslesen.

-
Im Normalfall so viel Bytes wie der serialisierte Datentyp benötigt hat. Wenn du ein int mit 4 Byte Größe schreibst, dann werden natürlich genau 4 Bytes benötigt.
Du musst natürlich schon wissen was, wo in deinem Stream steht.
-
Ok, habt Dank!
-
Ich lese per recv() (Winsock) Daten ein und möchte sie halt erstmal in einem großen Empfangsbuffer speichern.
Und wer verschickt diese Daten?
Warum werden Zahlen per Text übertragen und nicht binär?bb
-
81809 (aus dem char buffer) soll in eine integer variable gespeichert werden
Siehste, wenn man das so schreibt, dann denkt man natuerlich daran, dass 81809 in Textform vorliegt, also "81809" da du von char-Array redest. Scheint ja nicht so zu sein, wie sich jetzt herausstellt. Es wird also doch binaer uebertragen?
-
Also ich verpacke meine Daten auf Senderseite in ein Struct, dort liegen die Daten entweder als int, char oder gemischt vor. Dann wird jeweils ein "Structpaket" übers Netz gesendet und muss auf der Empfängerseite erstmal "aufgefangen" werden. Dazu speichere ich momentan alles, was reinkommt, in einen char Buffer. Ich weiß ja leider vorher nicht, was gleich ankommt, ob char oder int, daher dachte ich, man kann erstmal alles in den char Buffer packen und später dann abtrennen, was zusammengehört (daher auch meine Frage nach einem cast von char nach int).
green tentacle schrieb:
ich habe ein char-Array, in das ich byteweise einlese.
Bedeutet das nicht, dass einfach alle Daten hintereinander stehen?
knivil schrieb:
Es wird also doch binaer uebertragen?
Ich denke doch, dass die Daten auf der Bitübertragungsschicht Binär übertragen werden. Mir werden Sie halt später Byte für Byte in einen Buffer geschoben.
Ändert das jetzt etwas?