[Algemeen] File decoding

Pagina: 1
Acties:

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik ben bezig met het converteren van een oude data file van een product, alleen naast het niet weten van de structuur kan ik ook niet echt achterhalen hoe ze het hebben opgeslagen.

Om te beginnen het lezen van de strings... Er is een integer, die aangeeft hoelang de string is, iedere string wordt gevolgd door een #0,

code:
1
03 00 00 00 48 00 6F 00 69 00 00 00 -> Hoi#0


Is dit een standaard manier? Is dit omdat de records andere pragma pack hebben (sorry ken de techniek echt wel eens eerder gehoor dat dit de opslag structuur beinvloed)

De data die er na komt, lijkt ook niet van een vaste grote, is het mogelijk bij het opslaan van records dat je alleen de gevulde waardes opslaat (ik neem automatisch)

Wie kan me helpen?

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je neemt aan dat alles wat er in geschreven wordt records zijn? Hoe ben je daar zo zeker van dan? En zelfs als het zo is zal het van de taal afhangen hoe deze behandeld worden. Het zou dus misschien al een beetje helpen als je kan achterhalen door welke programmertaal het bestand geschreven wordt.

We adore chaos because we like to restore order - M.C. Escher


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Het is in C geschreven
Ik neem aan dat het records zijn want het gaat om 20000+ items, ik neem aan dat je die niet als losse structs gaat opslaan maar als vaste structs.....

Het is niet afhankelijk van de taal hoe ze worden opgeslagen volgens mijn weten, maar van de pragma pack en hoeveel bits os je hebt, 32bits is een int 4 bytes bijvb en bij 16bits een int maar 2 bytes... of heb ik het dan ook weer fout

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Parcye schreef op 20 February 2003 @ 14:36:
Het is in C geschreven
Ik neem aan dat het records zijn want het gaat om 20000+ items, ik neem aan dat je die niet als losse structs gaat opslaan maar als vaste structs.....
Misschien is er wel gewoon elke keer met fread en fwrite gewerkt op losse integers enz. Als dat netjes in een functie zit zie ik niet waarom dat een probleem zou zijn. Bovendien doet het aantal er niet toe bij programmeren. Een loop en je hebt er zoveel je wilt, records of niet. Maar
Het is niet afhankelijk van de taal hoe ze worden opgeslagen volgens mijn weten, maar van de pragma pack en hoeveel bits os je hebt, 32bits is een int 4 bytes bijvb en bij 16bits een int maar 2 bytes... of heb ik het dan ook weer fout
En dat verschilt dus weer per compiler (16bits, 32bits of zelfs 64bits compiler) en per CPU (MSB of LSB). Hoe de verschillende type variablen en structures opgeslagen worden hangt ook af van de compiler. Over het algemeen behandelen de compilers van dezelfde talen dit wel hetzelfde, maar dat is geen garantie.

Maar wat is je vraag eigenlijk? Hoe packed records er onder de meeste c compilers uit zien?

We adore chaos because we like to restore order - M.C. Escher


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
De vraag is, welke pragma pack ZOU gebruikt kunnen zijn....

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

#pragma is bij mijn weten alleen een manier om aan te geven aan de compiler dat als ie t niet snapt gewoon de regel mag negeren. En ik denk niet dat een compiler meerdere manieren heeft van een struct packen. Ongepacked worden ze galigned zodat het snelste werkt voor de processor. Gepacked zit alles gewoon netjes achter elkaar zoals de programmeur het aangegeven heeft en voor de compiler gebruikelijk is.

Structures schrijven in een bestand dmv fwrite schrijft gewoon precies wat er in het geheugen staat in het bestand. Als er een pointer in staat zal ie gewoon de pointer wegschrijven en niet de waarde waar de pointer naar schrijft. Als er een array in staat zal ie alle items uit het array er in zetten.

Strings in C worden niet anders behandeld dat of een array van char of een pointer. Een struct zal niet veranderen als de string langer of korter wordt, packed of niet packed. Het is of een pointer of de maximale lengte van het array van char.

Ik zie dus niet wat packed records direct met je probleem te maken hebben en hoe je dat aan de inhoud van een bestand zou kunnen zien.

[ Voor 4% gewijzigd door LordLarry op 20-02-2003 21:15 ]

We adore chaos because we like to restore order - M.C. Escher


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Het zijn zeker geen platte structures, als de strings opgeslagen zijn zoals jij zegt. De records hebben die manier immers een variabele grootte.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Ik zou een dump kunnen posten van stukje van de file... missschien dat jullie dan zeggen 'ja' dat is zo iets...

Laat maar weten...

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Misschien kun je beter informeren bij de makers van het product in kwestie? Het zou ook kunnen helpen om het product te vermelden en (indien bekend) de taal waarin het geschreven is. Het stringformaat dat je noemt doet mij aan Delphi/ObjectPascal denken.

Verder zul je het grootste deel van het oncijferen zelf moeten doen, vrees ik.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Het is championship manager 4 pre release, de makers willen niets vrij geven

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik denk niet dat structs je op wat voor manier dan ook gaan helpen bij het direct uitlezen van het bestand. Het is gewoon handwerk en veel uitzoeken.

PS: Valt dit nog wel binnen de richlijnen van GOT/P&W? Het begint op illegale praktijken te lijken...

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Parcye schreef op 21 februari 2003 @ 01:04:
Ik zou een dump kunnen posten van stukje van de file... missschien dat jullie dan zeggen 'ja' dat is zo iets...

Laat maar weten...
Lijkt me een beter idee ja.

En edit even weg over welk prog het gaat, dan zijn we weer zeker legaal on-topic bezig

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Soultaker schreef op 21 February 2003 @ 01:10:
Misschien kun je beter informeren bij de makers van het product in kwestie? Het zou ook kunnen helpen om het product te vermelden en (indien bekend) de taal waarin het geschreven is. Het stringformaat dat je noemt doet mij aan Delphi/ObjectPascal denken.
Delphi gebruikt alleen bij shortstrings (max length 255) een leading byte met de stringlength.

Professionele website nodig?


Verwijderd

Parcye schreef op 21 February 2003 @ 11:12:
Het is ..., de makers willen niets vrij geven
Het beste wat volgens mij nu kunt doen, is een officieel verzoek indienen naar het formaat van de data. Ik meen dat je dit dan een jaar (of zo?) de tijd moet geven en heb je dan nog niets, of een officieel bericht dat ze het niet vrij geven, dan mag je in Europa het oorspronkelijke programma reverse-engineren om de structuur alsnog uit te pluizen.

De EU wetgeving zegt hierover o.a.:
You are legally entitled to decompile a program if and only if it's necessary to "achieve the interoperability of an independently created computer program with other programs", but not for any other purpose.
Dus als het bedrijf niet wil vrijgeven wat het formaat is en je dit echt nodig hebt voor "interoperability" dan is het legaal toegestaan om te decompileren... Zie o.a. http://fravia.anticrack.de/legal.htm (Kan even niets beters vinden, maar zoek eens op "legal reverse engineering" en je vindt er genoeg over. Ook de FSF heeft er een uitgebreide handleiding over die ik even niet kan vinden.)

Doe je dit niet langs de door de EU voorgeschreven route, dan ben je (nu al) illegaal bezig (maar zo te zien heb je al bevestigd gekregen dat de oorspronkelijke fabrikant dit formaat niet prijs wil geven).
LordLarry schreef op 21 February 2003 @ 11:14:
PS: Valt dit nog wel binnen de richlijnen van GOT/P&W? Het begint op illegale praktijken te lijken...
Niet als de TS onder de europese wetgeving valt.
offtopic:
Reden ook dat enkele open-source initiatieven enkel uit niet-amerikanen bestaat.

[ Voor 10% gewijzigd door Verwijderd op 21-02-2003 13:05 ]


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Is het illegaal editors te maken voor spelen? zoja, damn dan ben ik al 8 jaar illegaal bezig...... oeps :'(

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Nou ik heb dus zitten kijken, de file is een 46mb ongeveer, gevuld met alle data, de strins zijn met een 00 scheidings teken per char weg geschreven, er is een int/word die aangeeft wat de lengte is. Verder lijkt het er op dat er heel veel optionele velden zijn die dus alleen worden opgeslagen als ze ook zijn gevuld en dus niet als er niets in staat, een record gebruikt namelijk altijd de lengte van de record.... dit is nu dus niet het geval

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Wat is er exact mis met dit:
C++:
1
2
3
4
5
6
7
8
9
10
11
DWORD   l_Length;
DWORD   l_Result;
char*   l_String;

if(!ReadFile(FileHandle, &l_Length, sizeof(l_Length), &l_Result, NULL))
  return E_FAILED:
l_String = new char[++l_Length];
if(!ReadFile(FileHandle, l_String, l_Length, &l_Result, NULL) || l_Result != l_Length)
  return E_FAILED:

// Gebruik string

[ Voor 4% gewijzigd door curry684 op 23-02-2003 03:20 . Reden: Regeltje minder... ]

Professionele website nodig?


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
int lengte, dan unicode string?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

_js_ schreef op 23 February 2003 @ 04:17:
int lengte, dan unicode string?
:?

Professionele website nodig?


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Dat zou idd kunnen, dat de file ge encode is? Maar curry648 zo los ik het probleem vna letter#0letter#0 niet op...

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

Ik ga er vanuit dat integer aangeeft hoe lang de waarde er achter is #0 betekend het einde net zoals bij Delphi en C++. Je zou eens moeten kijken of er repeterende blokken data zijn; bijv. met vaste lengtes e.d.

  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Dus de 09 00 00 00 zou aangeven dat er 9 chars komen..... dus 11 22 33 44 55 66 77 88 99 echter komen er 18... 11 00 22 00 33 00 etc....

Er komen geen echte vaste blokken voor, veel blokken hebben ongeveer de zelfde lengte.

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


Verwijderd

dat kan het dus ook zijn ;)
struct die bepaalde lengte heeft
[headerstruct]
[spellerstruct1]
[spellerstruct2]
[spellerstruct3]
[spel1]
[spel2]
[spel3]

Weet je zeker dat de file nog niet gecompressed is ofzo?
Anders moet je kijken of je file header kunt achterhalen

  • PiepPiep
  • Registratie: Maart 2002
  • Laatst online: 08-06 11:02
quote: parcye
03 00 00 00 48 00 6F 00 69 00 00 00 -> Hoi#0
quote: _js_
int lengte, dan unicode string?
Lijkt me idd ook zo.
Een 32 bits integer voor de lengte in tekens.
Dan is elk teken 2 bytes, 1x 16 bits groot.
Vervolgens afgesloten met een extra 16bits 0
Unicode betekent trouwens niet dat het gecodeert is ofzo, het is net zoiets als ASCII maar dan 16 bits.
Ik weet het niet 100% zeker maar ik geloof dat 0-255 of 00-FF in hex, gelijk zijn als met ASCII, en alles wat daarboven zit, dus 0100-FFFF zijn in gebruik voor taalspecifieke tekens of gereserveert voor toekomstige tekens.
Kan je een stuk hex dump posten van die file?
Gewoon 16 regels van 16 bytes ofzo kan je denk ik al best veel aan zien.

486DX2-50 16MB ECC RAM 4x 500MB Drive array 1.44MB FDD MS-Dos 6.22


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Iemand een idee hou ik dan een unicode string met delphi kan inlezen? (nog niet gezocht)

Hexdump:
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
0043b520h: 6D 6E 09 00 00 0B 00 00 00 4D 00 6F 00 64 00 6F ; mn.......M.o.d.o
0043b530h: 00 20 00 41 00 62 00 6F 00 75 00 6E 00 61 00 00 ; . .A.b.o.u.n.a..
0043b540h: 00 01 00 06 00 00 00 F6 05 00 00 C7 C2 56 00 00 ; .......ö...ÇÂV..
0043b550h: 07 00 00 00 43 00 68 00 61 00 6D 00 65 00 72 00 ; ....C.h.a.m.e.r.
0043b560h: 69 00 00 00 01 00 06 00 00 00 F7 05 00 00 C8 C2 ; i.........÷...ÈÂ
0043b570h: 56 00 00 09 00 00 00 4E 00 27 00 47 00 75 00 69 ; V......N.'.G.u.i
0043b580h: 00 6D 00 62 00 61 00 74 00 00 00 01 00 06 00 00 ; .m.b.a.t........
0043b590h: 00 F8 05 00 00 C9 C2 56 00 00 07 00 00 00 4D 00 ; .ø...ÉÂV......M.
0043b5a0h: 75 00 6C 00 6C 00 69 00 6E 00 69 00 00 00 01 00 ; u.l.l.i.n.i.....
0043b5b0h: 06 00 00 00 F9 05 00 00 CA C2 56 00 00 06 00 00 ; ....ù...ÊÂV.....
0043b5c0h: 00 4E 00 6A 00 69 00 6E 00 6F 00 75 00 00 00 01 ; .N.j.i.n.o.u....
0043b5d0h: 00 06 00 00 00 FA 05 00 00 CB C2 56 00 00 05 00 ; .....ú...ËÂV....
0043b5e0h: 00 00 45 00 62 00 6F 00 75 00 E9 FF 00 00 01 00 ; ..E.b.o.u.éÿ....
0043b5f0h: 06 00 00 00 FB 05 00 00 9D 98 80 00 00 06 00 00 ; ....û...˜€.....
0043b600h: 00 48 00 61 00 62 00 61 00 73 00 68 00 00 00 01 ; .H.a.b.a.s.h....
0043b610h: 00 06 00 00 00 FC 05 00 00 61 D8 79 00 00 0A 00 ; .....ü...aØy....
0043b620h: 00 00 4E 00 79 00 65 00 6D 00 62 00 20 00 4F 00 ; ..N.y.e.m.b. .O.
0043b630h: 6D 00 6F 00 67 00 00 00 01 00 06 00 00 00 FD 05 ; m.o.g.........ý.
0043b640h: 00 00 4A FC 73 00 00 06 00 00 00 52 00 61 00 70 ; ..Jüs......R.a.p
0043b650h: 00 68 00 6C 00 7A 00 00 00 01 00 06 00 00 00 FE ; .h.l.z.........þ
0043b660h: 05 00 00 53 C3 56 00 00 03 00 00 00 4E 00 79 00 ; ...SÃV......N.y.
0043b670h: 6F 00 00 00 01 00 06 00 00 00 FF 05 00 00 54 C3 ; o.........ÿ...TÃ
0043b680h: 56 00 00 04 00 00 00 47 00 61 00 68 00 61 00 00 ; V......G.a.h.a..
0043b690h: 00 01 00 06 00 00 00 00 06 00 00 4C FC 73 00 00 ; ...........Lüs..
0043b6a0h: 05 00 00 00 4D 00 62 00 65 00 6E 00 67 00 00 00 ; ....M.b.e.n.g...
0043b6b0h: 01 00 06 00 00 00 01 06 00 00 3B D9 01 00 00 06 ; ..........;Ù....
0043b6c0h: 00 00 00 46 00 61 00 6C 00 61 00 6D 00 61 00 00 ; ...F.a.l.a.m.a..
0043b6d0h: 00 01 00 06 00 00 00 02 06 00 00 4D FC 73 00 00 ; ...........Müs..
0043b6e0h: 10 00 00 00 52 00 6F 00 75 00 73 00 73 00 65 00 ; ....R.o.u.s.s.e.
0043b6f0h: 61 00 75 00 20 00 4E 00 6F 00 6C 00 61 00 6E 00 ; a.u. .N.o.l.a.n.
0043b700h: 67 00 65 00 00 00 01 00 06 00 00 00 03 06 00 00 ; g.e.............
0043b710h: ED C3 56 00 00 04 00 00 00 5A 00 75 00 6B 00 6F ; íÃV......Z.u.k.o

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Hexdump:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
0193ed00h: 18 FC FF FF 00 00 00 00 00 00 00 00 00 00 AF 3F ; .üÿÿ..........¯?
0193ed10h: 00 00 02 0A 00 00 00 41 00 6C 00 65 00 6B 00 73 ; .......A.l.e.k.s
0193ed20h: 00 61 00 6E 00 64 00 61 00 72 00 00 00 07 00 00 ; .a.n.d.a.r......
0193ed30h: 00 56 00 61 00 73 00 69 00 6C 00 65 00 76 00 00 ; .V.a.s.i.l.e.v..
0193ed40h: 00 00 00 00 00 1E 2D 76 46 12 00 00 00 41 00 6C ; ......-vF....A.l
0193ed50h: 00 65 00 6B 00 73 00 61 00 6E 00 64 00 61 00 72 ; .e.k.s.a.n.d.a.r
0193ed60h: 00 20 00 56 00 61 00 73 00 69 00 6C 00 65 00 76 ; . .V.a.s.i.l.e.v
0193ed70h: 00 00 00 07 00 00 00 56 00 61 00 73 00 69 00 6C ; .......V.a.s.i.l
0193ed80h: 00 65 00 76 00 00 00 0A 00 00 00 0A 00 00 00 0A ; .e.v............
0193ed90h: 00 00 00 0A 00 00 00 0A 00 00 00 05 00 00 00 00 ; ................
0193eda0h: 00 00 00 F8 02 00 00 FF FF FF FF 70 17 00 00 06 ; ...ø...ÿÿÿÿp....
0193edb0h: 00 00 00 1C 00 00 00 A8 72 01 00 00 0A 00 00 00 ; .......šr.......
0193edc0h: 00 00 00 14 00 00 00 00 00 00 00 14 14 BD D9 CA ; .............œÙÊ
0193edd0h: 3A D9 E6 D4 B8 DC DC B8 88 88 88 88 88 88 F0 EB ; :ÙæÔžÜÜžˆˆˆˆˆˆðë
0193ede0h: 0D E1 CF 0D D4 E1 14 01 08 05 0A 08 0A 02 05 04 ; .áÏ.Ôá..........
0193edf0h: 06 05 0B 0D 0D 0D 0B 0C 0A 0A 0D 0C 0A 08 0D 05 ; ................
0193ee00h: 0F 0F 03 10 27 10 27 00 00 00 00 00 00 00 00 84 ; ....'.'........„
0193ee10h: 00 84 00 0A 00 00 00 00 00 00 00 00 04 00 00 00 ; .„..............
0193ee20h: 41 00 00 00 41 00 00 00 04 01 04 01 01 FF 0B 00 ; A...A........ÿ..
0193ee30h: 00 00 C4 45 00 00 00 00 FF FF FF FF CE 00 00 FF ; ..ÄE....ÿÿÿÿÎ..ÿ
0193ee40h: FF FF FF FF FF FF FF 00 00 18 FC FF FF 18 FC FF ; ÿÿÿÿÿÿÿ...üÿÿ.üÿ
0193ee50h: FF 18 FC FF FF 18 FC FF FF 18 FC FF FF 18 FC FF ; ÿ.üÿÿ.üÿÿ.üÿÿ.üÿ
0193ee60h: FF 18 FC FF FF 18 FC FF FF 00 00 00 00 00 00 00 ; ÿ.üÿÿ.üÿÿ.......
0193ee70h: 00 00 00 AA 3F 00 00 02 05 00 00 00 50 00 65 00 ; ...ª?.......P.e.
0193ee80h: 74 00 61 00 72 00 00 00 08 00 00 00 4D 00 6C 00 ; t.a.r.......M.l.
0193ee90h: 61 00 64 00 65 00 6E 00 6F 00 76 00 00 00 00 00 ; a.d.e.n.o.v.....
0193eea0h: 00 00 19 2D 76 46 0E 00 00 00 50 00 65 00 74 00 ; ...-vF....P.e.t.
0193eeb0h: 61 00 72 00 20 00 4D 00 6C 00 61 00 64 00 65 00 ; a.r. .M.l.a.d.e.
0193eec0h: 6E 00 6F 00 76 00 00 00 08 00 00 00 4D 00 6C 00 ; n.o.v.......M.l.
0193eed0h: 61 00 64 00 65 00 6E 00 6F 00 76 00 00 00 0A 00 ; a.d.e.n.o.v.....
0193eee0h: 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 0A 00 ; ................
0193eef0h: 00 00 05 00 00 00 00 00 00 00 F8 02 00 00 FF FF ; ..........ø...ÿÿ
0193ef00h: FF FF 70 17 00 00 06 00 00 00 17 00 00 00 10 6E ; ÿÿp............n
0193ef10h: 00 00 00 0A 00 00 00 00 01 06 14 0B 05 01 01 12 ; ................
0193ef20h: 01 14 10 0A F5 DC DC DA F0 EB EB EB EB E6 DC 88 ; ....õÜÜÚðëëëëæÜˆ
0193ef30h: 88 88 88 88 88 E1 DC EB F5 DC 04 DA E6 0C 14 06 ; ˆˆˆˆˆáÜëõÜ.Úæ...
0193ef40h: 06 0D 0D 0C 0D 07 0B 0D 0C 0E 11 10 0C 07 06 0A ; ................
0193ef50h: 06 0D 07 0D 0B 05 12 0D 08 04 10 27 10 27 00 00 ; ...........'.'..
0193ef60h: 00 00 00 00 00 00 84 00 84 00 0A 00 00 00 00 00 ; ......„.„.......
0193ef70h: 00 00 00 05 00 00 00 41 00 00 00 41 00 00 00 08 ; .......A...A....
0193ef80h: 08 04 08 01 FF 07 00 00 00 0F 21 00 00 00 00 FF ; ....ÿ.....!....ÿ
0193ef90h: FF FF FF CE 00 00 FF FF FF FF FF FF FF FF 00 00 ; ÿÿÿÎ..ÿÿÿÿÿÿÿÿ..
0193efa0h: 18 FC FF FF 18 FC FF FF 18 FC FF FF 18 FC FF FF ; .üÿÿ.üÿÿ.üÿÿ.üÿÿ
0193efb0h: 18 FC FF FF 18 FC FF FF 18 FC FF FF 18 FC FF FF ; .üÿÿ.üÿÿ.üÿÿ.üÿÿ
0193efc0h: 00 00 00 00 00 00 00 00 00 00 AC 3F 00 00 02 06 ; ..........¬?....
0193efd0h: 00 00 00 47 00 65 00 6F 00 72 00 67 00 69 00 00 ; ...G.e.o.r.g.i..
0193efe0h: 00 08 00 00 00 53 00 74 00 6F 00 79 00 63 00 68 ; .....S.t.o.y.c.h
0193eff0h: 00 65 00 76 00 00 00 00 00 00 00 1B 2D 76 46 0F ; .e.v........-vF.
0193f000h: 00 00 00 47 00 65 00 6F 00 72 00 67 00 69 00 20 ; ...G.e.o.r.g.i. 
0193f010h: 00 53 00 74 00 6F 00 79 00 63 00 68 00 65 00 76 ; .S.t.o.y.c.h.e.v
0193f020h: 00 00 00 08 00 00 00 53 00 74 00 6F 00 79 00 63 ; .......S.t.o.y.c
0193f030h: 00 68 00 65 00 76 00 00 00 0A 00 00 00 0A 00 00 ; .h.e.v..........
0193f040h: 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 05 00 00 ; ................
0193f050h: 00 00 00 00 00 F8 02 00 00 FF FF FF FF 70 17 00 ; .....ø...ÿÿÿÿp..
0193f060h: 00 06 00 00 00 14 00 00 00 B7 07 01 00 00 0A 00 ; .........·......
0193f070h: 00 00 00 01 01 11 10 14 04 01 14 02 0A 14 05 FE ; ...............þ
0193f080h: E5 DB EA E5 E2 EC F4 EA DD DE 01 88 88 88 88 88 ; åÛêåâìôêÝÞ.ˆˆˆˆˆ
0193f090h: 01 DE 05 01 01 14 E8 01 14 07 0C 0A 0E 12 0F 0D ; .Þ....è.........
0193f0a0h: 0C 0A 10 07 0C 12 11 0A 09 0C 0E 0C 11 0E 0C 0D ; ................
0193f0b0h: 06 10 14 0D 00 10 27 10 27 00 00 00 00 00 00 00 ; ......'.'.......
0193f0c0h: 00 84 00 84 00 0A 00 00 00 00 00 00 00 00 06 00 ; .„.„............
0193f0d0h: 00 00 41 00 00 00 41 00 00 00 88 00 84 00 01 FF ; ..A...A...ˆ.„..ÿ
0193f0e0h: 09 00 00 00 8C 85 00 00 00 00 FF FF FF FF CE 00 ; ....Œ…....ÿÿÿÿÎ.
0193f0f0h: 00 FF FF FF FF FF FF FF FF 00 00 18 FC FF FF 18 ; .ÿÿÿÿÿÿÿÿ...üÿÿ.
0193f100h: FC FF FF 18 FC FF FF 18 FC FF FF 18 FC FF FF 18 ; üÿÿ.üÿÿ.üÿÿ.üÿÿ.
0193f110h: FC FF FF 18 FC FF FF 18 FC FF FF 00 00 00 00 00 ; üÿÿ.üÿÿ.üÿÿ.....
0193f120h: 00 00 00 00 00 B1 3F 00 00 02 05 00 00 00 52 00 ; .....±?.......R.
0193f130h: 75 00 6D 00 65 00 6E 00 00 00 07 00 00 00 48 00 ; u.m.e.n.......H.
0193f140h: 72 00 69 00 73 00 74 00 6F 00 76 00 00 00 00 00 ; r.i.s.t.o.v.....
0193f150h: 00 00 20 2D 76 46 0D 00 00 00 52 00 75 00 6D 00 ; .. -vF....R.u.m.
0193f160h: 65 00 6E 00 20 00 48 00 72 00 69 00 73 00 74 00 ; e.n. .H.r.i.s.t.
0193f170h: 6F 00 76 00 00 00 07 00 00 00 48 00 72 00 69 00 ; o.v.......H.r.i.
0193f180h: 73 00 74 00 6F 00 76 00 00 00 0A 00 00 00 0A 00 ; s.t.o.v.........
0193f190h: 00 00 0A 00 00 00 0A 00 00 00 0A 00 00 00 05 00 ; ................
0193f1a0h: 00 00 00 00 00 00 F8 02 00 00 FF FF FF FF 70 17 ; ......ø...ÿÿÿÿp.
0193f1b0h: 00 00 06 00 00 00 1F 00 00 00 52 11 01 00 00 0A ; ..........R.....
0193f1c0h: 00 00 00 00 01 01 0A 0A 14 14 0E 14 14 0B 14 14 ; ................
0193f1d0h: E5 EA E6 DB EB CE DB EF 22 DC E0 88 88 88 88 88 ; åêæÛëÎÛï"Üàˆˆˆˆˆ
0193f1e0h: 88 DB D8 09 D6 EA 18 EA EF 13 14 0E 12 0C 11 14 ; ˆÛØ.Öê.êï.......
0193f1f0h: 09 0C 11 0D 13 0C 10 0C 14 05 07 13 12 11 0B 0C ; ................
0193f200h: 0E 06 10 0D 10 00 10 27 10 27 00 00 00 00 00 00 ; .......'.'......
0193f210h: 00 00 84 00 84 00 0A 00 00 00 00 00 00 00 00 07 ; ..„.„...........

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Sorry had niet gezien dat het unicode was... maakt het veeeeel complexer:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
DWORD   l_Length;
DWORD   l_Result;
wchar_t* l_String;

if(!ReadFile(FileHandle, &l_Length, sizeof(l_Length), &l_Result, NULL))
  return E_FAILED:
l_String = new wchar_t[++l_Length];
l_Length *= sizeof(wchar_t);
if(!ReadFile(FileHandle, l_String, l_Length, &l_Result, NULL) || l_Result != l_Length)
  return E_FAILED:

// Gebruik string

Duh :P

Professionele website nodig?


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Als je een unicode string hebt en die opslaat, zou die niet zelf de lengte er al voor zetten?

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Volgens mij niet, want dan zou er geen #0 achter hoeven staan.

Een goede grap mag vrienden kosten.


Verwijderd

Unicode is gewoon TWideString/TWideChar dacht ik.
http://fundementals.sourceforge.net/unicode.html :)

[ Voor 34% gewijzigd door Verwijderd op 25-02-2003 00:04 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Parcye schreef op 24 February 2003 @ 23:41:
Als je een unicode string hebt en die opslaat, zou die niet zelf de lengte er al voor zetten?
Unicode is niks anders dan een codeermethode die 16 bits per karakter gebruikt ipv de 'reguliere' 8. Daardoor is een letter dus 2 bytes waarvan de hoogste in Germaanse talen vrijwel altijd 0 nul is. Unicode zegt niets over de opslagmethode: net zoals je een klassieke string naar keuze nullterminated en/of met leading size kunt opslaan kan dat met Unicode ook.

Aan de file te zien hebben ze ervoor gekozen om zowel leading size als terminating zero te gebruiken, en dat verhandigt dan ook het uitlezen.

En idd in Delphi kun je WideString gebruiken voor Unicode strings.

Professionele website nodig?


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
tomatoman schreef op 24 February 2003 @ 23:58:
Volgens mij niet, want dan zou er geen #0 achter hoeven staan.
Ik meen me te herinnerne als je een string in een struct hebt, bijvb
naam: string[30];

dat die wel int van lengte ervoor zette

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-08 22:26

Tomatoman

Fulltime prutser

Maar dan heb je altijd een string van een vaste lengte, dus niet null-terminated.

Een goede grap mag vrienden kosten.


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Kan je bij het opslaan van een record in delphi forceren dat deze en de leading size opslaat en de #0 ?

Ik heb wat dingen geprobeerd maar krijg het niet voor elkaar....

ben nu bezig te zoeken naar de file header alleen weet ik niet echt waar te beginnen met zoeken (ja op het begin)

[ Voor 48% gewijzigd door Parcye op 25-02-2003 15:23 ]

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002


  • Parcye
  • Registratie: Maart 2001
  • Laatst online: 24-08-2017
Inmiddels de header beetje gedecodeerd....

vanaf 0x000072 beginnen de files die er in zitten gecodeerd...

Eerste een unicode string van 32, dan unicode string van 5, de eerste is naam, de tweede de extensie, daarna volgt een longint die de grote van het datablock aangeeft. en dan volgt x bytes aan data...

nu nog die data zien te decoderen....

"Als je het kan bedenken, kan het gemaakt worden" Parcye - 14 januari 2002

Pagina: 1