03. april 2003 - 18:37Der er
6 kommentarer og 2 løsninger
Fjerne 2 bytes fra streng og erstatte dem med ét
Jeg har følgende problem: Jeg har en funktion som modtager en pointer til et char atray. Hvis char array'et indeholder de 2 bytes T7B+T7C eller T7B+T7D, skal disse erstattes med hhv. FLAG eller T7B ( altså kun ét tegn ) T7B, T7C, T7D, FLAG er konstanter. Jeg har skrevet flg. kode:
int dlLag::fjernStartStop(char *in, int l) { char buf[1050]; int p = 0 ; for ( int i = 0 ; i < l ; i++ ) { if ( in[i] == T7B ) { if ( in[i+1] == T7C ) { buf[p] = FLAG ; } if ( in[i+1] == T7D ) { buf[p] = T7B ; } i++; }else { buf[p] = in[i] ; } p++; }
for ( int i = 0 ; i < p ; i++ ) in[i] = buf[i] ; in[p] = 0 ;
return p ; }
Det virker ikke. Selvom strengen jeg sender med indeholder én af de 2 byte sekvenser, erstattes de ikke, som de skal. Hvad har jeg gjort forkert, og hvordan får jeg det til at virke ? Kan det gøres smartere ?
Mærkeligt ... kan jeg lokke dig til at forsøge med de samme konstanter, som jeg bruger ? const char FLAG = 0x7E; const char T7B = 0x7B; const char T7C = 0x7C; const char T7D = 0x7D;
Nu virker det. Fejlen lå ikke i denne funktion men et andet sted i klassen - jeg kom til at bruge en forkert pointer - en gang i mellem kan man vist stirre sig blind på en fejl ;-)
Jeg vil gerne give point for din hjælp, hvis du lægger et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.