Du schreibst umfangreich - geht es Dir darum, den 9 Bytes langen String dreigeteilt zu behandeln?
Beispiel:
// Voraussetzung: Immer 9 Bytes Daten
// UDP_TX_PACKET_MAX_SIZE muss aber mind. 10 sein, es kommt nachher noch der
// Stringterminator 0x00 rein!
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
// angenommen, da steht jetzt "bt0010001" drin, Du möchtest
// - "bt" vergleichen (Byte 0-1)
// - "001" als Zahl1 sowie "0001" als Zahl2 extrahieren als integer
// Der Vergleich mit "strncmp" braucht keinen Stringterminator, da wir
// die Länge (= 2 Bytes) selbst bestimmen:
if (strncmp(packetBuffer, "<dein2ByteVergleichsString>", 2) == 0) {
// Beide Bytes stimmen überein
}
// Jetzt erst um die 2.te Zahl kümmern (Byte 5-8), für "atoi" String
// erst sauber abschliessen:
packetBuffer[9] = 0x00;
int Zahl2 = atoi(&packetBuffer[5]);
// Jetzt 1. Zahl (Byte 2-4) umwandeln: Zahl2 haben wir schon, deshalb
// kann man deren erste Stelle jetzt kaputt machen :)
packetBuffer[5] = 0x00;
int Zahl1 = atoi(&packetBuffer[2]);
So sollte es halbwegs effizient laufen - vorausgesetzt, ich habe Dein Problem richtig verstanden und es ging in erster Linie um diese 3-Teilung.
Nicht vergessen, daß für alle Stringfunktionen die Strings immer mit einem 0-Byte abgeschlossen sein müssem, sonst wird es nichts! ![]()
Viel Erfolg und Gruß,
mmi