C89 Substring in Hex suchen

#3026420
Lesenswert?

Juten Nabend!

ich suche mir schon seit Tagen einen Wolf ...

Ich lese hier Hex ein ->

1
  unsigned char buffer[8096];
2

3
    while (1) {
4

5
    res = read(fd, buffer, sizeof(buffer)-1);
6

7
      if (res > 0) {
8
      buffer[res] = '\0';
9
              
10
        for (i=0; i<=res; ++i ) {
11
        printf("%x ", buffer[i]);
12
        }
13

14
      }
15
    
16
    }

Was soweit gut läuft (Start sequenze: 1b 1b 1b 1b 1 1 1 1) ->

1
1b 1b 1b 1b 1 1 1 1 0 76 5 3 f8 ce 90 62 0 0 62 
2
0 72 63 1 1 76 1 0 1 5 1 52 ef 86 9 8 0 5 35 34 
3
2d 4c 96 99 1 0 1 63 26 cf 0 76 5 3 0 f8 ce 91 
4
62 0 62 0 72 0 63 7  1 77 1 9 8 5 0 35 34 2d 4c 
5
96 99 7 1 0 0 62 a ff ff 72 62 1 0 65 1 f6 f3 17 
6
7b 77 7 0 81 81 c7 82 3 ff 1 1 0 1 1 4 49 53 4b 
7
1 77 0 7 1 0 0 0 9 ff 1 0 1 1 1 9 8 5 35

Was ich allerdings NICHT hinbekomme ist nach einem
Teilstück zu suchen :(

Das hier läuft leider nicht ->
Was mir fast klar ist, ich müsste irgend wie
nach [i]+1+2+3+4 suchen können?!

1
ptr = strstr( buffer[i], "\0x1b\0x1b\0x1b\0x1b" );


Ja, ich habe zuerst in meinen Büchern nachgelesen!
#3026440
Lesenswert?

Henrik Wellschmidt schrieb:
> ptr = strstr( buffer[i], "\0x1b\0x1b\0x1b\0x1b" );

Das kann ja auch nicht funktionieren. Das erste Argument muss ein String 
sein und kein einzelnes Zeichen.

Vielleicht meinst Du das hier?
1
ptr = strstr( buffer + i, "\0x1b\0x1b\0x1b\0x1b" );

Macht allerdings in diesem Zusammehang nicht so viel Sinn. Du musst ja 
vermutlich nur einmal nach dem Teilstück suchen und nicht ab jedem 
Zeichen erneut. Höchstens ab der nächsten Fundstelle wieder ...
#3026460
Lesenswert?

Hmm schrieb:
> Was heisst: "Es läuft nicht"? Das ist keine Fehlerbeschreibung.
>
> Poste mal ein Minimalbeispiel, das compilierbar ist, nenne uns Compiler
> und System und poste auch eine Datendatei dazu.

Na klar ...

Code: http://pastebin.com/raw.php?i=0MkZXgzN

Daten: http://pastebin.com/raw.php?i=6Wizivpv

gcc version 4.6.3 (Debian 4.6.3-14+rpi1)

> Lies auch mal den Netiquette-Artikel hier im Forum, bitte.

Ich find die nicht! Nicht in der Hilfe, nicht in der Suche?!
#3026471
Lesenswert?

Henrik Wellschmidt schrieb:
> Code: http://pastebin.com/raw.php?i=0MkZXgzN
>
> Daten: http://pastebin.com/raw.php?i=6Wizivpv
>
> gcc version 4.6.3 (Debian 4.6.3-14+rpi1)

Was soll denn da auch passieren? Nach dem Einlesen der Daten wird 
strstr() ab jedem Zeichen im String einmal aufgerufen und das Ergebnis 
weggeworfen. Bis auf den read()-Aufruf kann der Compiler im Prinzip 
alles wegoptimieren.

>
>> Lies auch mal den Netiquette-Artikel hier im Forum, bitte.
>
> Ich find die nicht! Nicht in der Hilfe, nicht in der Suche?!

http://www.mikrocontroller.net/articles/Netiquette
Gast #3026487
Lesenswert?

read liest die Daten so ein, wie sie im Stream stehen.
Da wird nichts interpretiert.

Hex-, Dezimal- oder Dual-Darstellung ist für den Menschen.
Der Computer braucht das nicht.

Und wenn du
1
 printf("%u ", buffer[i]);
 machst, kommen Dezimalzahlen raus, aber an den Daten ändert sich 
nichts.

Ob da jetzt 0x1b  oder 033 oder 27 steht, ist egal, denn es ist immer 
das gleiche Bitmuster im Computer. Dargestellt wäre das  0b00011011

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren