Ik zit met het volgende probleem ik lees een binair bestand in naar een variabele genaamd buffer. Hiermee wil ik gaan zoeken of een bepaalde hexcode voorkomt. Alleen zijn mijn waardes in de file 8bit dus ik heb gekozen voor char. Alleen levert deze char mij wat "rotzooi" op rondom mijn values.
Als gevolg van deze "rotzooi" kan ik niet vergelijken op hexcode of decimaal. Indien ik kies voor een short gaat alles goed alleen mis ik dan waardes(vb: 1 t/m 6 aanwezig 1,3,5 niet wenselijk dus zo vind ik mijn key niet.
Iemand enig idee hoe ik dit kan oplossen? In deze screenshot staat een voorbeeld van wat ik bedoel met betrekking tot verkeerde waardes, zie het watch scherm(gekozen voor hex weergave). Buffer bevat de juiste als char inclusief de niet wenselijke extra's zoals ÿ bijvoorbeeld. pt bevat de shorts wel correct alleen mis ik nu dus om en om een waarde.
Mijn code:
Als gevolg van deze "rotzooi" kan ik niet vergelijken op hexcode of decimaal. Indien ik kies voor een short gaat alles goed alleen mis ik dan waardes(vb: 1 t/m 6 aanwezig 1,3,5 niet wenselijk dus zo vind ik mijn key niet.
Iemand enig idee hoe ik dit kan oplossen? In deze screenshot staat een voorbeeld van wat ik bedoel met betrekking tot verkeerde waardes, zie het watch scherm(gekozen voor hex weergave). Buffer bevat de juiste als char inclusief de niet wenselijke extra's zoals ÿ bijvoorbeeld. pt bevat de shorts wel correct alleen mis ik nu dus om en om een waarde.
Mijn code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| int main(array<System::String ^> ^args) { FILE * f; char fname[FILENAME_MAX]; long lSize; signed char * buffer; int result; int found_frame_key = 0; const int key_len = 8; sprintf_s(fname, FILENAME_MAX, "sense.raw"); fopen_s(&f, fname, "rb"); if(f) { fseek(f, 0, SEEK_END); lSize = ftell(f); fseek(f, 0, SEEK_SET); buffer = (signed char*) malloc((sizeof(signed char)*lSize)); result = fread(buffer, 1, lSize, f); fclose(f); } int ssize = lSize/2; short *ps = (short *)buffer; short *pt = (short *)buffer; while(pt-ps < ssize-key_len) { if(pt[0] == 255 && pt[1] == 255 && pt[2] == 255 && pt[3] == 255 && pt[4] == 255 && pt[5] == 255) { found_frame_key = 1; break; } pt++; } if(found_frame_key) { printf("jeroen"); // alleen ter test implementatie ontbreekt. } getch(); } |
[ Voor 0% gewijzigd door Jeroennl op 19-09-2008 17:48 . Reden: screenshot link klopte niet. ]