Probleme bei Datenempfang in Buffer, anschl. Kopieren und Umwandlung
-
Hallo zusammen,
ich habe ein merkwürdiges Problem. Über einen UDP-Socket empfange ich Daten in einen Buffer. Aus diesen Daten möchte ich dann zunächst 6 bestimmte Zeichen (Zeitangabe HHMMSS) herauskopieren, die ich anschließend auf ein reines Sekundenformat umrechnen möchte.
Problem1: Wenn ich pTime auf [6] beschränke, schreibt er mir beim Kopieren in pSekun1 Müll. Wenn ich zum Testen auf [8] erweitere, dann steht zwar in den letzten 2 Zeichen (also 6 und 7 von pTime1) Müll, meine Werte an Stelle 5 und 6 von pTime1, die ich ja haben wollte sind dann aber okay. Wie kommt das?!
Problem2: Beim Debuggen bleibt er direkt hinter der Berechnung der Sekundenzahl hängen (iSekBerechnet1), also in die Variable iSekBerechnet1 schreibt er gar keinen Wert. Hat jemand von euch eine Ahnung, woran das liegen kann?! In iStd1, iMin1 und iSek1 stehen die richtigen Werte, das habe ich beim Debuggen überprüft. Wieso will er dann keine Multiplikation durchführen?! Oder liegt der Fehler woanders?
Das Code-Stückchen habe ich euch unten angehängt.
Vielen Dank!!
char pBuffer1[1024] = {0}; // Hier hinein werden die über den // UDP-Socket empfangenen Daten gespeichert char *pTime1 = new char[8]; // Zeitstempel HHMMSS char *pStd1 = new char[2]; // Zum Speichern von HH, char *pMin1 = new char[2]; // MM, char *pSekun1 = new char[2]; // SS char *pTest1 = new char[2]; // Test iRx = WlanRxSock1.ReceiveFrom(pBuffer1, iRxBuffer, strWlanTxIP, TxPortUINT); // Kopieren des mitgesendeten Zeitstempels: memcpy(pTime1, (char *) (pBuffer1 + 102), 8); memcpy(pStd1, (char *) (pTime1), 2); // Stunden memcpy(pMin1, (char *) (pTime1 + 2), 2); // Minuten memcpy(pSekun1, (char *) (pTime1 + 4), 2); // Sekunden memcpy(pTest1, (char *) (pTime1 + 4), 2); // Sekunden iStd1 = atoi(pStd1); // iStd1, iMin1, iSek1 sind integer iMin1 = atoi(pMin1); iSekun1 = atoi(pSekun1); // Berechnung der akt. Zeit in Sekunden: // iSekBerechnet1 ist long int iSekBerechnet1 = ((iStd1 * 3600) + (iMin1 * 60) + iSekun1); // Will nicht weiter...
-
atoi erwartet null-terminierte Strings, bei dir fehlt die 0.
-
Gehört dieser Thread nicht eigentlich ins ANSI-C Forum?
-
Oh, wenn ich falsch gepostet haben sollte, tuts mir leid!
Ich programmiere in C++, daher habe ich dieses Forum gewählt. Stimme aber zu, in ANSI-C könnte es auch passen.
-
xinehh schrieb:
Ich programmiere in C++...
*such* WO? Bis auf new (delete fehlt übrigens) ist kein C++ zu sehen.
-
Ich geb Dir ja Recht. Der Rest ist in C++, der Ausschnitt lässt es nicht wirklich erahnen. Habs bei ANSI C reingeschrieben. (Selbst verschieben geht ja nicht?)