Toon posts:

[C++] STX EOF tekens

Pagina: 1
Acties:
  • 187 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik krijg data binnen op mijn compoort, en die wil ik gaan loggen naar een bestand.
dat werkt inmiddels, alleen krijg ik ook rare tekens erin, en volgens mij zijn dat de STX en EOF tekens.
Nu wil ik echter dat ipv een 'blokje' STX en EOF enz in mijn log hebben.
Hoe onderschep ik die karakters en zorg ik dat ze vervangen worden door STX en EOF?

de data die ik nu krijg:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@

En ik wil dan dus zoiets:
STX@@@@EOT EOF

Ik heb wel op internet gevonden dat STX 0x02 is,
maar hoe dat nu verder moet weet ik niet..

Kan iemand daarbij helpen?

Verwijderd

Topicstarter
ik dacht zelf aan zoiets:

C++:
1
2
3
4
5
6
for (qi1=0; qi1 >= strlen(mess); qi1++) {   
    if (mess[qi1] == STX) {
        AfxMessageBox("STX detected");
    }

}


mess is een string die de ingelezen waardes bevat,
en STX is zo gedefineerd: #define STX 0x02

maar dat werkt niet echt..

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
'Gekke' tekens onder de 32 en boven de 127 zullen inderdaad niet goed weergegeven worden. Als je in plaats van character 0x02 "STX" wilt printen, zul je dus inderdaad dat karakter moeten onderscheppen en de juiste string ervoor in de plaats printen.
Verwijderd schreef op 29 June 2003 @ 16:58:
maar dat werkt niet echt..
Wat werkt er niet?

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 29 June 2003 @ 16:58:
ik dacht zelf aan zoiets:
C++:
1
2
3
4
5
6
for (qi1=0; qi1 >= strlen(mess); qi1++) {   
    if (mess[qi1] == STX) {
        AfxMessageBox("STX detected");
    }

}

mess is een string die de ingelezen waardes bevat,
en STX is zo gedefineerd: #define STX 0x02

maar dat werkt niet echt..
Die groter gelijk dan moet iig een kleiner dan zijn.
C++:
1
2
3
4
5
6
for (qi1=0; qi1 < strlen(mess); qi1++) {    
    if (mess[qi1] == STX) {
        AfxMessageBox("STX detected");
    }

}

Dan zou het moeten werken. Kijk wel uit met strlen. Als de gegevens die je uitleest toevallig ook 0x00 bevatten, mis je een stuk. Als dat niet het geval is, zou het zo moeten werken...

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 29 June 2003 @ 16:58:
ik dacht zelf aan zoiets:

C++:
1
2
3
4
5
6
for (qi1=0; qi1 >= strlen(mess); qi1++) {   
    if (mess[qi1] == STX) {
        AfxMessageBox("STX detected");
    }

}


mess is een string die de ingelezen waardes bevat,
en STX is zo gedefineerd: #define STX 0x02

maar dat werkt niet echt..
q1 is waarschijnlijk geen string (dwz zeggen geen std::string uit #include <string> ) want dan had je gewoon mess.size() kunnen schrijven, en dan had je ook gewoon de replace() member gehad.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
MSalters schreef op 29 June 2003 @ 23:13:
[...]

q1 is waarschijnlijk geen string (dwz zeggen geen std::string uit #include <string> ) want dan had je gewoon mess.size() kunnen schrijven, en dan had je ook gewoon de replace() member gehad.
Ik denk dat std::string ook problemen heeft met nullen in de string of niet ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Nee.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21:31
Hmmm ... als ik dit invoer :

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
    const char * s0 = "blaat\0blaat";
    const char * s1 = "blaat\0bloot";

    std::string s00 = string( s0,7 );
    std::string s01 = string( s1,7 );

    cout<<s00<<"  "<<s00.length()<<std::endl;
    cout<<s01<<"  "<<s01.length()<<std::endl;

    if( s00 == s01 )
        cout<<"strings are equal";
    else
        cout<<"strings are not equal";


Geeft bij mij deze output :
blaat 7
blaat 7
strings are equal
Beetje vreemd, en niet echt werkbaar als je niet zeker weet of het allemaal ascii is wat je binnenkrijgt.

Of begrijp ik ( voor de zoveelste keer ) niet hoe je std::string moet gebruiken?

[edit]

Oops ff bijwerken :D

[edit]
Zoals gewoonlijk heb je gelijk :D. Hij heeft er weinig problemen mee. Die 7 's zijn natuurlijk nie goe ....

[ Voor 45% gewijzigd door farlane op 01-07-2003 10:23 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Yep. Als je nou gewoon char const[] s0 = "...\0..." gebruikt, dan kun je sizeof(s0) gebruiken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1