Daten aus einem Char-String auslesen



  • Hallo,

    ich bekomme von einem Server einen String geschickt der Zwei Zahlen enthält. Diese möchte ich nach dem Empfangen aus dem Char String auslesen. Wer kann mir da einen Tipp geben? Die Zahlen sind Integer.

    Beispiel mit den Zahlen 75 & 65:

    msg="7565"

    Wer kann mir da helfen?

    thx im Voraus



  • Schau doch mal in die FAQ unter "Einmal Zahl und zurück", womöglich reicht das schon für dich aus. Wenn nicht, stell eifach mal eine genauere Frage.



  • Hmm, unter diesem Suchbegriff habe ich nichts gefunden.

    Ich möchte 2 Zahlen, die ich von Meiner Server-Software per TCP/IP über Sockets erhalten habe, in 2 Variablen speichern. Bei Aufruf der Funktion recv() wird das gesendetet Datepaket in ein char array abgelegt. Dieses Array enthält nun die beiden Zahlen, die kein Trennzeichen haben(Also char msg="7565";//enthält die Zahlen 75 und 65).

    Aus diesem arry muss ich die beiden Zahlen auslesen und dann in zwei Variablen speichern. Da es sich um INT Zahlen handelt weiß ich dass jede Zahl 4Bytes breit ist.

    Ich hoffe es ist jetzt verständlicher.



  • Irgendwann bricht sich hier nochmal jemand den Finger, beim klicken auf "FAQ/Archiv". 🙄

    Hier der Link: Einmal Zahl nach String und zurück

    Und wenn du weißt das deine Zahlen immer auf 4 Bytes bestehen, kannst du Sie ja immer zuvor in der Mitte trennen:

    char zahl1[3], zahl2[3];
    strncpy(zahl1, msg, 2);
    // hier das gleiche nochmal, statt msg mit &msg[2]
    


  • Prima. Hat mir schon ein bisschen weiter geholfen. Das Problem ist nur, was mache ich wenn ich mehr als zwei Zahlen habe? Das müsste doch irgendwie mit dem Shift Operator gehen. Mit memcpy habe ich schon mal so was gemacht. Kann man das noch eleganter lösen?



  • Du könntest in einer for()-Schleife durch dein Array gehen und jeden Abschnitt einzeln auswerten:

    vector<int> zahlen;
    
    for(int p=0;p<strlen(msg);p+=2)
    {
      char zahl[3]={0};
      strncpy(zahl,msg+p,2);
      zahlen.push_back(atoi(zahl));
    }
    

    (packt immer zwei Ziffern aus der Eingabe zu einer Zahl zusammen)



  • Habs mal ganz anders gemacht, da die Zahlen in dem String 1-3 Stellig sein können. Nun sind die Zahlen durch ';' getrennt. Also: msg[]=";352;391". Nun wollte ich auf folgende weise die Zahlen in Intger Variablen ablegen:

    char *cx_o,*cx_u,*loc;
    msg[]=";352;391". 
    cx_o=(char*)malloc(sizeof(int));
    cx_u=(char*)malloc(sizeof(int));
    
    loc = strchr(msg, ';');//loc==adr. an der ';' abgelegt ist
    loc++;                 //setze loc auf nächste Byte:=1.Byte der 1.Zahl(352)
    memcpy(cx_o,loc,4);    //kopiere 1. Zahl Byteweise nach cx_o
    
    loc = strchr(msg, ';');
    loc++;
    memcpy(cx_o,loc,4);   //kopiere 2. Zahl Byteweise nach cx_u
    
    cout<<"Oben: "<<*cx_o<<endl;
    cout<<"Unten: "<<*cx_u<<endl;
    

    Die Ausgabe die ich da erhalte ist lediglich:

    Oben: 3
    Unten:

    Sieht jemand mein Fehler?



  • Hi!

    http://www.cplusplus.com/ref/cstring/strtok.html ist evtl interessant für dich.

    int main( int argc, char **argv ) 
    { 
    	char bla[] = ";352;391";
    	char *c;
    	int  a, b;
    
    	c = strtok( bla, ";" );
    
    	a = atoi( c );
    	c = strtok( NULL, ";" );
    	b = atoi( c );
    
    	printf( "%d %d\n", a, b );
    
    	return 0; 
    }
    

    Außerdem, was machst du da??? C? Dann poste doch auch ins Ansi C Forum und nicht ins C++ Forum.

    grüße


Anmelden zum Antworten