Pfanne:
Moin Tommy,
das ist nur ein Auszug, unten hänget ein:
if (arg != NULL) delete[] arg;
drann.....
Ich bekomme per TCP ein Telegramm mit payload.
In meinem Fall ist da lediglich ein String drinn.....
Um aber damit intern weiter zu arbeiten möchte ich die einzelnen Bytes gerne in ein Char[] casten.
Wenn ich das payload[] weiter verwende steht doch in einem Byte der ASCCII-Code des Buchstaben.
Wie soll ich denn damit weiterarbeite?
Grundsätzlich funktioniert es ja, nur ist die Größe von arg[] scheinbar falsch definiert.
Übergeben wird mir die Länge des payload in Bytes.
Müsste dann nciht auch arg[] so groß werden?
Bzw. wenn 11 Bytes gesendet werden passen die ja in ein Array[10],
wo mache ich den Gedankenfehler?
Gruß
Pf@nne
"Wo mache ich den Gedankenfehler?" - An mehreren Stellen.
Ein char ist ein byte mit anderer Betrachtung.
Wenn Du als Zeichen 'A' siehst, steht dort als Dezimalzahl 65, als Hex 0x41, als oktal 0101 und der Prozessor sieht nur binär 01000001.
Das ist alles das Gleiche, nur anders interpretiert. Du hast also schon alles, was Du brauchst.
Wenn Du das Ganze als Zeichenkette ausgeben willst, muss der Prozessor ja wissen, wo das Ende ist. Das wird durch das Zeichen '\0' gekennzeichnet (ein Byte mit dem Wert dezimal 0). Für das brauchst Du hinten dran noch 1 Zeichen Platz.
Bzw. wenn 11 Bytes gesendet werden passen die ja in ein Array[10]
Ganz böser Fehler, der zufällig eine Weile gut gehen kann, je nachdem, was hinter dem Array steht.
Ein Array[10] hat 10 Elemente - von 0 bis 9 - wie willst Du da 11 Elemente rein bekommen?
Wenn Du 11 Nutzzeichen hast, die Du ausgeben willst, brauchst Du ein Array[12] = 11 Nutzzeichen + '\0'.
Weitere Infos zu Zeichenketten in C habe ich hier beschrieben.
Edit: Die Fehleraufzählung erhebt keinen Anspruch auf Vollzähligkeit.
Gruß Tommy