ReadFile Zeigt nicht alle Zeichen an



  • So sollte ReadFile aussehen (HEX)
    02 FD E0 D0 00 00 06 7E 4F 4B 3B 0D 0A 91

    Anscheinend schneidet Readfile ab den 0ern ab.
    02 FD E0 D0 00 00 06 7E 4F 4B 3B 0D 0A 91
    obwohl dwRead 14 Bytes angibt.
    Wo sind diese "Zeichen" ? 😕
    bzw welche möglichkeit gibt es, mir alle Zeichen anzuzeigen.



  • Wie gesagt schneidet ReadFile nix ab sondern deine Ausgabefunktionen weil diese alle mit Nullterminierten Strings arbeiten.
    Du könntest mal das Probieren

    ReadFile (hCom, &InString, sizeof (InString), &dwRead, NULL);
    for(int i = 0; i < dwRead; i++)
    printf("%c", InString[i]);
    

    Das gibt ja jedes Zeichen einzeln aus. Ansonsten beherzige den Tipp von CStoll.

    schirrmie



  • Ich bekomme mit folgendem Code die Zeichen einzeln heraus:

    for (int i=0;dwRead>0;i++)
    {
    		ReadFile (hCom, &wpString, 1, &dwRead, NULL);
    
    		wpString[dwRead]='\0';
    
    	         sprintf(t,"Bytes: %d\nRead: %s\n", dwRead, wpString);
              	MessageBox(NULL,t,"Read",0);
    

    Bin gestern 3 Stunden gesessen-> Kein Ergebnis. 😞

    Wie kann ich einen Platzhalter setzten (und für welches Zeichen (\0)oder HEX 0x00????)
    bzw Kann ich dann die Zeichen wieder in einen String zusammensetzten.

    Habe es mit strstr und strncpy versucht->Erfolglos


  • Mod

    Ich verstehe immer noch nicht was Du mit den gelesenen Daten willst.
    Wenn Du Daten, die ein 0x0 Zeichen enthalten an eine Routine weitergibt, die annimmt, dass ein String bei 0x0 endet, wir z.B. sprintf, dan wirst Du nie die Daten damit irgend wo hin bekommen.

    Auf MessageBox kann keine 0x0 ausgeben. Das ist kein darstellbares Zeichen! Was willst Du mit den Daten wirlich machen? Gelesen werden sie, nur werden Sie auf durch die Methoden, die Du verwendest nicht transportiert.

    Was möchtest Du?



  • Ich bekomme diese Antwort:
    02 FD E0 D0 00 00 06 7E 4F 4B 3B 0D 0A 91
    Und in Diesem Fall benötige ich Byte 9+10
    also 4F und 4B

    mfg Maxx



  • Dann hol dir doch diese Bytes - über Indexzugriff solltest du problemlos drankommen (du mußt nur daran denken, daß der Index bei 0 beginnt, du deine Werte also als wpString[8] und wpString[9] erwischst).



  • Stehe jetzt total auf der Leitung
    Kannst du mir einen Tip geben wie ich das machen ?

    Danke im voraus



  • Das sollte aber eigentlich Grundlagenwissen sein:

    sprintf(t,"data bytes %x %x",wpString[8],wpString[9]);
    MessageBox(NULL,t,"Read",0);
    


  • Na klar !
    Danke



  • Hier schwirt auch irgendwo ein source zu bin2dez bzw. bin2hex etc. rum, ganz sinnvoll wenn man mit werten arbeitet die nicht mit ascii darstellbar sind,..
    gruß


Anmelden zum Antworten