Entwickler-Ecke

Dateizugriff - Ver- und Entschlüsseln


newbie44 - Do 15.07.04 13:05
Titel: Ver- und Entschlüsseln
Hallo an alle Delphi-Fans,

habe ein Problem, habe bei einer Datei die Verschlüsselung geknackt und diese als Datei gespeichert in diesem Format:

a=1 und so weiter, wie bringe ich jetzt aber delphi dazu, die Datei zu öffnen, zu entschlüsseln und zu speichern, wenn ich dann einige Änderungen gemacht habe, will ich die Datei erneut verschlüsseln. Wie mache ich das am besten?

Ich wäre euch alle sehr dankbar.

Gruß

Sebby :?:


inselberg - Do 15.07.04 13:27

a=1 als bytewert oder als ascii-zeichen '1'

bei einfachem ersetzen dürfte dir das [http://www.delphi-forum.de/viewtopic.php?t=27970&highlight=stringreplace] - in ne schleife gepackt - weiterhelfen


newbie44 - Do 15.07.04 13:52

Also gut es soll natürlich hexadezial-verschlüsselt werden zum beispiel soll der Wert 01 aus hex in 43 umgewandelt werden. Das mit der Schleife hab ich mir auch schon überlegt, also folgendes, die Datei soll folgendermaßen aussehen.

Ich habe 3 Felder, im Feld 1 gibt der Benutzer ein 8 Zeichenlanges Wort ein, in das Zweitefeld gibt er entweder eine 1234567 ein. Dann im 3. Feld soll der Benutzer 1.56 oder irgendeinge Andere Kommazahl eingeben, nun folgendes Problem, wenn der Benutzer in Feld 1 auch Zahlen eingibt, dann sollen die zuerst verschlüsselt werden, Wenn er z. B. 21 eingibt, soll das in der Verschlüsselung halt ba heißen.

Aber wie mache ich das dann wenn nach dem Namen von Feld1 eine gewisse Anzahl von P's kommen. Hier mal die Datei leider nur Editormäßig:


Quelltext
1:
   >$9$<5$PPPPPPPPPPPP>$9$<5$PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP$=>$9$<~$71$;>$9$<~$71$;>$9$<b~$7SR5Pb]PPUTPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP                    


Enschlüsselt sieht die Datei folgendermaßen aus:


Quelltext
1:
   Untitlet            Untitlet                                                        tmUntitl~tgatkUntitl~tgatkUntitlb~tgSRe b]  UT                    


Doch ich hab keine Ahnung wie ich das mit Delphi schaffen soll, ich brauche dringed hilfe, hab fast noch keine Erfahrung bin ja erst ein neuer nutzer

Bitte helft mir

Gruß

Sebby


highhatcompy - Di 20.07.04 15:09

Hi,
welchen Zweck sollte eine solche Ver- und Entschlüsselung haben, und in welches Dateiformat willst Du es speichern (z.B. als BIN Datei ???)?

Highhatcompy


newbie44 - Di 20.07.04 17:05

highhatcompy hat folgendes geschrieben:
Hi,
welchen Zweck sollte eine solche Ver- und Entschlüsselung haben, und in welches Dateiformat willst Du es speichern (z.B. als BIN Datei ???)?

Highhatcompy



Ich möchte damit eine Spieldatei neu Schreiben. Ja die Datei heißt Circuits.bin und ist für ein altes Rennspiel. Wäre für jede Hilfe sehr dankbar

Sebby :(


highhatcompy - Di 20.07.04 17:31

Hallo,
das mit dem Spiel habe ich mir schon gedacht.
1. Das mit den viele 'p's habe ich noch nicht verstanden, haben die eine bestimmte Bedeutung,sind sie regelmäßig angeordnet oder hast Du keine Ahnung was sie bedeuten?

2. Welche Ausücke willst Du ändern und wieder schreiben(>$9$<~$71$;)?

3. Wie groß ist Deine BIN Datei?

Highhatcompy


newbie44 - Mi 21.07.04 11:23

highhatcompy hat folgendes geschrieben:
Hallo,
das mit dem Spiel habe ich mir schon gedacht.
1. Das mit den viele 'p's habe ich noch nicht verstanden, haben die eine bestimmte Bedeutung,sind sie regelmäßig angeordnet oder hast Du keine Ahnung was sie bedeuten?

2. Welche Ausücke willst Du ändern und wieder schreiben(>$9$<~$71$;)?

3. Wie groß ist Deine BIN Datei?

Highhatcompy


Danke erstmal für deine Antwort, die P's sind sozusagen abstandshalter und haben keine Bedeutung sind aber trozdem wichtig. Genau ich möchte das Wort Untitled als (>$9$<~$71$;)? schreiben. Die P's kommen in regelmäßigen Abständen. Sind immer eine Gewisse Anzahl, bis zu einer bestimmten Adresse.

Die Datei ist genau 4.484 Bytes das sind ungefähr 4.37 kb.

Das doofe is nur ich bin newbie hab also nur grundkenntnisse.

Danke schon im Vorraus

Gruß

Sebby


highhatcompy - Mi 21.07.04 12:59

Hallo,
ok aber was möchtest Du jetzt eigentlich wissen? Wie du die Zeichen umwandelst, oder wie du die Datei ändern mußt?
Den Hex Wert ermittel ist recht einfach(siehe Delphi Hilfe oder mich).
Wenn du aber nicht weißt wie du in die Datei schreibst, da gibt es zwei Möglichkeiten:
1. Immer nur den Wert in der Datei ändern oder
2. die kommplette Datei neu schreiben!

Was willst Du?


Highhatcompy


newbie44 - Mi 21.07.04 15:49

highhatcompy hat folgendes geschrieben:
Hallo,
ok aber was möchtest Du jetzt eigentlich wissen? Wie du die Zeichen umwandelst, oder wie du die Datei ändern mußt?
Den Hex Wert ermittel ist recht einfach(siehe Delphi Hilfe oder mich).
Wenn du aber nicht weißt wie du in die Datei schreibst, da gibt es zwei Möglichkeiten:
1. Immer nur den Wert in der Datei ändern oder
2. die kommplette Datei neu schreiben!

Was willst Du?


Highhatcompy


Ich will die Nummer 2 Machen. Die Datei beginnt immer mit den selben Hex-Werten, das sind 01 00 00, das ist sozusagen der Header, dann kommt der Streckenname verschlüsselt, dann kommen P's bis zur Adresse 0x0060 das ist genau position 57. Dann kommt auch immer der Selbe vorgang, das heißt, dann kommen 4 Zeichen die folgenden Hexwert haben: 23 3D 0F 00. Dann kommen genau 5 Buchstaben beim Streckennamen. Anschließend kommen folgende Hex-Werte: 7E 24 37 31 23 3B 0F 00. Danach kommen wieder 5 Buchstaben des Streckennamens und die vom vorhergehenden Satz genannten Hex-Werte. Danach wiederholt sich fast das ganze, hat eben nur einen Buchstaben weniger. 3F 3D 20 1F 15 0F 62 7E 24 37.Danach kommt noch folgende Behauptung: 53 52 3F 50 E4 44 50 50 55 52. Der Rest wird bis 0x1180 mit P's befüllt, wie formuliere ich das ganze?

Gruß

Sebby :?:


highhatcompy - Mi 21.07.04 17:28

Hi,

hier ist jetzt mal 'nen Codefetzen der deinen Header (10 00 00 Hex)in die BIN Datei schreibt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
...
var f:file;
    b: byte;

begin
     AssignFile(f,'C:\header.bin');
     Rewrite(f,1);
     b:=$10;
     Blockwrite(f,b,sizeof(Byte));
     b:=$00;
     Blockwrite(f,b,sizeof(Byte));
     b:=$00;
     Blockwrite(f,b,sizeof(Byte));
     CloseFile(f);
end;
...

genauso mußt du es mit den restlichen 4.481 Bytes machen :wink: !

Du solltest das aber lieber noch etwas optimieren (Schleifen und größere Böcke schreiben oder so)!

Highhatcompy


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt.


newbie44 - Mi 21.07.04 17:38

Hi,

danke erstmal, für den Codefetzten, es ist ja gar nicht so schwer wie ich immer dachte, wie teile Ich Ihm aber jetzt, die verschlüsselung mit, wenn der Streckenname z. B. Untitled oder Megapol heißt?. Ich habe ein Feld, das Strecke heißt, ich muss Ihn das nur irgendwie sagen, das er eben das was da drin steht mit meiner Entschlüsselungsliste umsetzt. Das ist vielleicht ne Frage.

Wie schon gesagt sieht meine Liste so aus

a=1
b=2
c=3
d=4
e=5
f=6
g=7
h=8
usw.

Bitte helfe mir nochmal weiter, das ist für mich wie ein Rätsel.

Gruß

Sebby :?:


highhatcompy - Mi 21.07.04 18:47

Da hast du recht :lol: !

Megapol würde also 13,5,7,1,16,15,12 heißen, und in Hex 0d,05,07,01,10,0f,0c ???

Ist das so richtig? Wenn ja würde ich ein Array einrichten in dem alle Buchstaben von a-z passen und über eine Schleife den String dekodieren lassen. Z.B. so:

Delphi-Quelltext
1:
2:
...
var buchstaben: array [0..25of char =('a','b','c',
das geht dann so weiter bis

Delphi-Quelltext
1:
,'z');                    

und dann decodest du alle Buchstaben deines Strings(z.B. Megapol) in einer Schleife, etwa so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
...
var
l,z1,z2: integer;
s: string;
ausgabe: array [0..6of byte;

begin
     s:='Megapol';
     l:=length(s);
     for z1:=1 to l do
     begin
          for z2:=0 to 25 do
          begin
               if buchstaben[z2]=copy(s,1,z) then ausgabe[z1]:=z2;
          end;
     end;
end;
...

Du hast dan in dem Array das decodierte Wort stehen und musst es nur nuch in Hexwert umwandel(auch wieder in einer Schleife)!

P.S. Habe den Code aus dem Kopf geschreiben, wenn was nicht funkt schreibe nochmal und ich teste es auf meinen Rechner!


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt.


newbie44 - Do 22.07.04 09:28

Danke, werde es später testen, muss dir nur leider mitteilen, das die Verschlüsselung doch etwas anders aussieht, die kleinen normalen Buchstaben gehen nur bis i

also von a-1 = 1-9

Danach geht es folgendermaßen weiter.

j=:
k=;
l=<
m==
n=>
o=?
p=hexwert 20
q weiß ich noch nicht denke aber 21
r="
s=#
t=$
u=%
v=&
w='
x=(
y=)
z=*

Dann die Großbuchstaben (in Hexwerten)

A=11
B=12
C=13
D=14
E=15
F=16
G=17
H=18
I=19
J=1A
K=1B
L=1C
M=1D
N=1E
O=1F
P=00
Q=01
R=02
S=03
T=04
U=05
V=06
W=07
X=08
Y=09
Z=10

So das ist der entschlüsselungscode, ich glaube nicht das man das einfach in eine liste schreiben kann. Ach ja nochwas beim Entschlüsseln werden erst die Nummern entschlüsselt das heißt wenn ab da steht ist das halt die 12.

Bitte helf mir weiter, habe keine Ahnung wie ich das in Delphi formulieren soll, aber danke schon für die Anregungen, sie sind echt gut.

Du sprachst von Schleifen, wie baue ich diese ein?. Es gibt da noch ein Problem mit den P's Wenn der eingegebene name kürzer als 8 Buchstaben ist, dann sollen für die restlichen P's eingefügt werden. Wie formuliert man Hexadressen in Delphi, denn die P's hören ja an einer ganz besonderen Stelle wieder auf.

Gruß

Sebby :?:


highhatcompy - Do 22.07.04 14:26

Hi,
das mit dem decoden ist kein Problem. Du erstellst einfach zwei Arrays, dass erste so wie ich es dir gezeigt habe(du musst nur die Anzahl der Felder ändern (anzahl der benötigten Zeichen)) und das zweite etwa so:

Delphi-Quelltext
1:
Var hexarray: array [0..25of string = ('1','2',...'10');                    

In dem wird der Integerwert der Hexwertes als string geschrieben. Beide Arrays sollten gleich groß sein! Dan suchst du im ersten Array das gewünschte Zeichen und im zweiten steht an der gleichen stelle das decodierte zeichen.

Die werte brauchst du nicht in Hex umwandel schreib sie als integer in die Datei, statt

Delphi-Quelltext
1:
2:
...
b:=$00;

einfach

Delphi-Quelltext
1:
2:
3:
...
b:=stringtoint(hexarray[0]);
...


Das mit dem Nummern entschlüssel musst du mir noch mal erklären, aber langsam!!!

Die Schleifen sind Delphiurschleim nimm dir ein Buch und liess es nach oder Delphihilfe oder Suchfunktion im Forum!


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt.


newbie44 - Do 22.07.04 15:24

Danke für die Antwort,

ich habe jetzt das ganze schon mal mit delphi ausprobiert, das mit dem header-schreiben geht ja schon gut, habe es schon probiert,

doch leider verstehe ich das mit den Listen überhaupt nicht. Wie ich das verstanden habe, soll ich eine Liste mit den normalen Buchstaben machen etwa so oder (a, b, c, ..., g, h, z) und dann soll ich eine andere liste erstellen die die verschlüsselung enthält nicht war (1,2,3...,8,9)

Wo soll ich dann aber platzieren, wohl auch bei beginn oder.

Was nun die Zahlen betrifft, stell dir vor du möchtest in den Streckennamen eine 44 einbauen. Die Zahl würde dann verschlüsselt doch "dd" heißen, is es nicht so, ja natürlich, ist die selbe verschlüsselung eben nur anders rum

Danke schon im Vorraus.

Gruß

Sebby :?: :!: :? :( :cry:


highhatcompy - Do 22.07.04 15:53

Ja,
genau so habe ich das gemeint! Jedes Zeichen aus der ersten Liste, entspricht dem entsprechenden String aus der zweiten Liste. In der ersten Liste sind alle benötigten Zeichen,Buchstaben und Zahlen in der Reihenfolge wie du willst, du must dann die verschl. werte der zweiten Liste in der selben Reihenfolge angeben!

Die arrays solltest du nach

Delphi-Quelltext
1:
2:
var
   Form1:TForm1;

und vor

Delphi-Quelltext
1:
implementation                    

einbauen! Das war doch deine Frage :?: ?

Und das mit dem Streckennamen ist so gemeint: Dei Strecke heisst Megapol44, aber wenn du sie codieren möchtest muss sie 44Megapol heissen ????? :?

Bis bald!


newbie44 - Do 22.07.04 16:00

highhatcompy hat folgendes geschrieben:
Und das mit dem Streckennamen ist so gemeint: Dei Strecke heisst Megapol44, aber wenn du sie codieren möchtest muss sie 44Megapol heissen ????? :?

Bis bald!


Nein, da hast du mich falsch verstanden, wenn der streckenname abcd21 heißt, dann sieht er doch kodiert folgendermaßen aus 1234ba. Wenn buchstaben eingegeben werden, müssen diese anders rum kodiert werden, das heißt also nicht nach a-->1 sondern eben 1-->a

Hast du das verstanden ? :?:

Aber jetzt zu den Listen gut, ich habe verstanden wo ich diese hinbauen soll, wenn der Benutzer nichts in das Feld eingegeben hat, dann soll eine Fehlermeldung kommen "Bitte etwas in das Feld namen eintragen". Nächstes Problem, wie spreche ich den Inhalt des Feldes an und codiere ihn sofort, wie du das im 2. Beitrag gemeint hast?

Danke schon im Vorraus für die Tipps und danke das dir Zeit für mich nimmst

Gruß

Sebby :?: :cry: :? :(


highhatcompy - Do 22.07.04 16:30

Hallo,
na so richtig verstehe ich das noch nicht, aber wenn du weißt wie es decodiert wird, dann musst du die beiden listen so anpassen das es funkt.!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
 ...  
var  
l,z1,z2: integer;  
s: string;  
ausgabe: array [0..2of byte;  
const
buchstaben: array[0..2of char = ('a','b','c'); //Alle deine Zeichen
hexwerte: array[0..2of string = ('1','2','3'); //Codierte Integer als strings
 
begin  
     s:='cba';  
     l:=length(s);  
     for z1:=1 to l do  
     begin  
          for z2:=0 to 2 do  
          begin  
               if buchstaben[z2]=copy(s,1,z) then showmessage('Vorher: '+buchstaben[z2]+' -> nachher: '+hexwerte[z2];
          end;  
     end;  
end;


Probiers mal!


newbie44 - Do 22.07.04 17:14

Hi,

gut habe es probiert sind aber ziemlich viele Errors, hier eine liste:

Undefinierter Bezeichner Z

For-schleife muss eine lokale variable sein.
Bitte verbessere das, ich bin ein newbie hab davon überhaupt keine Ahnung :)


Gruß

Sebby :?: :wink:


highhatcompy - Do 22.07.04 17:19

Hi,
das z muß z1 heissen!!


newbie44 - Do 22.07.04 17:26

Hi,

habe das verbessert, doch der code hat immer noch fehler weis nicht wiso, hier ist er:


Delphi-Quelltext
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:
type
  TForm1 = class(TForm)
    OK: TButton;
    GroupBox1: TGroupBox;
    Name: TLabeledEdit;
    procedure OKClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; f:file; b: byte; l,z1,z2: integer;    
s: string;    
ausgabe: array [0..60of byte;
const  
buchstaben: array[0..60of char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); //Alle deine Zeichen
hexwerte: array[0..60of string = ('31','32','33','34','35','36','37','38','39','3A','3B','3C','3D','3E','3F','20','21','22','23','24','25','26','27','28','29','2A','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','00','01','02','03','04','05','06','07','08','09','10','a','b','c','d','e','f','g','h','i'); //Codierte Integer als strings



implementation

{$R *.dfm}

procedure TForm1.OKClick(Sender: TObject);
begin
AssignFile(f,'C:\header.bin');
     Rewrite(f,1);
     b:=$01;
     Blockwrite(f,b,sizeof(Byte));
     b:=$00;
     Blockwrite(f,b,sizeof(Byte));
     b:=$00;
     Blockwrite(f,b,sizeof(Byte));
     b:=$00;
     CloseFile(f);
     begin
     s:='Megapol';
     l:=length(s);
     for z1:=1 to l do
     begin
          for z2:=0 to 60 do
          begin
               if buchstaben[z2]=copy(s,1,z1) then showmessage('Vorher: '+buchstaben[z2]+' -> nachher: '+hexwerte[z2]
     end;
end;
end;
end.


Könntest du Ihn bitte für mich verbessern, so das er läuft, ich würde dann auch meine Fehler besser verstehen

Gruß

Sebby. :(

Muss jetzt weg, bin erst um 17:45 wieder da :wink:


highhatcompy - Do 22.07.04 18:51

Hallo da bin ich wieder!

Schau die mal den Code jetzt an!

Delphi-Quelltext
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:
type  
  TForm1 = class(TForm)  
    OK: TButton;  
    GroupBox1: TGroupBox;  
    Name: TLabeledEdit;  
    procedure OKClick(Sender: TObject);  
  private  
    { Private-Deklarationen }  
  public  
    { Public-Deklarationen }  
  end;  

 
var  
  Form1: TForm1; f:file; b: byte; l,z1,z2: integer;      
s: string;      
ausgabe: array [0..60of byte;  
const    
buchstaben: array[0..60of char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); //Alle deine Zeichen 
// Achtung die hier eingetragen Werte müssen Integer Werte sein!!!
//z.B. aus '31' muss '49' werden usw.
hexwerte: array[0..60of string = ('31','32','33','34','35','36','37','38','39','3A','3B','3C','3D','3E','3F','20','21','22','23','24','25','26','27','28','29','2A','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','00','01','02','03','04','05','06','07','08','09','10','a','b','c','d','e','f','g','h','i');  

 

 
implementation  

 
{$R *.dfm}  

 
procedure TForm1.OKClick(Sender: TObject);  
begin  
AssignFile(f,'C:\header.bin');  
     Rewrite(f,1);  
     b:=1;  
     Blockwrite(f,b,sizeof(Byte));  
     b:=0;  
     Blockwrite(f,b,sizeof(Byte));  
     b:=0;  
     Blockwrite(f,b,sizeof(Byte));  
 
     // bis hier wird der Header geschrieben
     begin  
     s:='Megapol';  
     l:=length(s);  
     for z1:=1 to l do  
     begin  
          for z2:=0 to 60 do  
          begin  
               //Achtung: habe copy befehl geändert!!!!
               if buchstaben[z2]=copy(s,z1,1then 
               begin
                    //Hier wird das Codierte in die Datei geschreiben!!
                    b:=strtoint(hexwerte[z2]);
                    Blockwrite(f,b,sizeof(Byte));  
               end;
 
     end
  end;
CloseFile(f);   
end;  
end.


Ich hoffe ich konnte dir weiter helfen!

Highhatcompy


highhatcompy - Fr 23.07.04 13:36

Hallo,
hier meine Antwort zu Deiner Frage in der PN!
Habe den Code mal ein wenig gewandelt!

Delphi-Quelltext
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:
...
var z3,z4: integer;
...
s:='Megapol';  
l:=length(s);  //Ermittlung der Länge
AssignFile(f,'C:\header.bin');  
     Rewrite(f,1);  
     b:=1;  
     Blockwrite(f,b,sizeof(Byte));  
     b:=0;  
     Blockwrite(f,b,sizeof(Byte));  
     b:=0;  
     Blockwrite(f,b,sizeof(Byte));
     z3:=8-l;
//wenn der String weniger als 8 Zeichen hat wird diese schleife durchlaufen
//und schreibt die fehlenden 00
     if z3>0 then 
     begin
          for z4:=1 to z3 do
          begin
               b:=0;
               Blockwrite(f,b,sizeof(Byte));
          end;
     end;
     CloseFile(f);

Hoffe das ich helfen konnte!

Highhatcompy


newbie44 - Fr 23.07.04 13:44

Hey danke, das funzt ja bestends, noch ne Frage wegen des Taschenrechners in Windows, da gibt es ja die Funktion hex, muss ich dann auf Dez Okt oder Bin schalten?

Danke

Sebby :wink: :idea:


highhatcompy - Fr 23.07.04 13:59

Hi,
du machst Dir doch sicher einen Spass mit Mir!?? :wink: :lol: :roll:

newbie44 hat folgendes geschrieben:
Hey danke, das funzt ja bestends, noch ne Frage wegen des Taschenrechners in Windows, da gibt es ja die Funktion hex, muss ich dann auf Dez Okt oder Bin schalten?

Danke

Sebby :wink: :idea:


Du stellst den Rechner auf Hex gibst den Hexwert ein, und dann stellst du ihn auf dez und du hast den Wert!

Highhatcompy


newbie44 - Fr 23.07.04 15:31

Nein, ich mach keinen Spaß mit dir, ich habe jetzt den Quellcode nochmal umgeschrieben, jetzt funzt es, super


Delphi-Quelltext
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:
83:
84:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    OK: TButton;
    GroupBox1: TGroupBox;
    Name: TLabeledEdit;
    procedure OKClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1; f:file; b: byte; l,z1,z2: integer; z3,z4: integer;
s: string;    
ausgabe: array [0..60of byte;
const  
buchstaben: array[0..60of char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); //Alle deine Zeichen
hexwerte: array[0..60of string = ('49','50','51','52','53','54','55','56','57','3A','3B','3C','3D','3E','3F','20','21','22','23','24','25','26','27','28','29','2A','11','12','13','14','15','16','17','18','19','1A','1B','1C','1D','1E','1F','00','01','02','03','04','05','06','07','08','09','10','a','b','c','d','e','f','g','h','i'); //Codierte Integer als strings



implementation

{$R *.dfm}

procedure TForm1.OKClick(Sender: TObject);
begin
AssignFile(f,'C:\header.bin');    
     Rewrite(f,1);    
     b:=1;    
     Blockwrite(f,b,sizeof(Byte));    
     b:=0;
     Blockwrite(f,b,sizeof(Byte));    
     b:=0;
     Blockwrite(f,b,sizeof(Byte));    
   
     // bis hier wird der Header geschrieben
     begin
     s:='abcdef';
l:=length(s);  //Ermittlung der Länge  
AssignFile(f,'C:\header.bin');    
     Rewrite(f,1);
     b:=1;    
     Blockwrite(f,b,sizeof(Byte));    
     b:=0;    
     Blockwrite(f,b,sizeof(Byte));
     b:=0;    
     Blockwrite(f,b,sizeof(Byte));  
     z3:=8-l;  
//wenn der String weniger als 8 Zeichen hat wird diese schleife durchlaufen
//und schreibt die fehlenden 00  
     if z3>0 then   
     begin
          for z4:=1 to z3 do
          begin  
               b:=0;
               Blockwrite(f,b,sizeof(Byte));
               end;
               for z2:=0 to 60 do    
            for z1:=1 to l do

          begin
if buchstaben[z2]=copy(s,z1,1then
               begin
                    //Hier wird das Codierte in die Datei geschreiben!!
                    b:=strtoint(hexwerte[z2]);
                    Blockwrite(f,b,sizeof(Byte));
               end;

          end;
     end;
     CloseFile(f);
end;
end;
end.


So jetzt müssen die P's geschrieben werden, sind eine ganz bestimmte anzahl, muss mal nachzählen.

bis später

Sebby :) :D

p.s. hab was vergessen, ich muss doch diese einstellung mit den nullen weglassen, ist doch nicht so wie ich immer dachte, dafür kommen halt mehr p's.

Also noch mal im Klartext.

01 00 00 kommt immer dann kommt der Streckenname z. B. Arcade Dann kommen P's bis zur position 88, wie formuliere ich das?

Gruß

Sebby


highhatcompy - Fr 23.07.04 15:36

Hallo,
dann ist ja gut!
Mit den P's machst Du es genauso wie wie mit den 00 für den Header. Eine For ...Next Schleife und dann sollte es gehen!

Viel Spass noch!


newbie44 - Fr 23.07.04 15:38

Aber wie mach ich das die P's nur bis zu einer ganz bestimmten Stelle gehen :?: es sind ja manchmal mehr oder weniger, ich kann dir auch gerne mal so eine datei schicken.

Gruß

Sebby :?: :?:


highhatcompy - Fr 23.07.04 15:47

Na,
mach das mal, aber vieleicht solltest Du dich mal mit Streams beschäftigen! Denn Streams kannst Du einfach auslesen. Wenn jetzt die Positionen bekannt sind kannst du einfach an diese Stelle etwas ändern.
Aber Streams sind nicht so meine Sache, da gibts sicher gute Tips im Forum, also mal suchen.

Highhatcompy


newbie44 - Fr 23.07.04 15:58
Titel: Bis zu einer bestimmten position in einer datei schreiben
Hi,

ich möchte in einer datei nur bis zu einer bestimmen Punkt schreiben. Ich habe mithilfe eines Hexedtiors die Position gefunden. Die Position hat die Nummer 17, bis dorthin möchte ich P's schreiben, nicht mehr und auch nicht weniger, übrigends p heißt in hexadezimal 50

Gruß

Sebby :?:


Udontknow - Fr 23.07.04 16:10

Hi!

Beschäftige dich doch am besten dazu einfach ein wenig mit Streams. Du könntest die Datei z.B. in einen MemoryStream einlesen, dann über die Eigenschaft Memory die 17 Bytes ändern und anschliessend per SaveToFile das geänderte File zurückschreiben.

Cu,
Udontknow


newbie44 - Fr 23.07.04 16:14

Udontknow hat folgendes geschrieben:
Hi!

Beschäftige dich doch am besten dazu einfach ein wenig mit Streams. Du könntest die Datei z.B. in einen MemoryStream einlesen, dann über die Eigenschaft Memory die 17 Bytes ändern und anschliessend per SaveToFile das geänderte File zurückschreiben.


Gut, das problem is ja nur, das ich die datei schon offen hab, schau dir mal meinen anderen beitrag an, da steht der sourcecode bis jetzt dabei. Ich schau mal was ich über Streams rausfinden kann.

By By

Sebby :? :)


Udontknow - Fr 23.07.04 16:23

Na, dann öffnest du die Datei eben nicht mit Rewrite/Reset, sondern liest, wie bereits geschrieben, die Datei in einen MemoryStream ein. Du musst dann übrigens gar nicht mal die Eigenschaft Memory nutzen, sondern stellst einfach die Position auf 0 und schreibst 17 mal dein gewünschtes Byte in den Stream.

Cu,
Udontknow


newbie44 - Fr 23.07.04 16:47

Du musst mich falsch verstanden haben, ich bin bei position 5 in der datei und möchte bis position 17 P's schreiben. Bitte gib mir konkreter hilfe, ich finde ja so wenig darüber im web.

gruß

sebby :roll:


SvenAbeln - Fr 23.07.04 17:13

nimm einfach eine Schleife von 5 bis 17 und schreibe jedesmal dein P


Delphi-Quelltext
1:
2:
3:
4:
for i:=5 to 17 do
begin

end;


highhatcompy - Fr 23.07.04 17:24

Hallo newbie44,

hier ist mal wieder Highhatc. ,kleiner Tip von mir gib in der Forumsuche "Hex stream" ein und du gelangs zu einem coolen Thread der dich Interessieren könnte!

Wo ist den die email mit der Datei?

Highhatcompy


newbie44 - Fr 23.07.04 17:55

Hab jetzt folgendes versucht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
r:=l+3
          for r to 17 do
          begin
           Blockwrite(f,b,sizeof(Byte));
     b:=80;
     end


Er sagt nur, das ein Operator oder Semikolon Fehlt, wo muss ich diesen Einfügen, würde diese Behauptung überhaupt funktionieren?

Gruß

Sebby :roll: :?:


highhatcompy - Fr 23.07.04 18:04

Hallo,
schau mal Zeile 1, da fehlt am ende ein Semikolon!
Und B:=80; muss bestimmt vor Blockwrite stehen!

Versuche es aber trotzdem mit Streams(ist schneller und bestimmt einfacher)!

Highhatcompy


MSCH - Fr 23.07.04 18:13

ich glaube, du solltest dich eher erstmal mit dem nativen Pascal auseinandersetzen. Also wie schreibe ich eine For-Schleife etc. Oder waren die Fehler beabsichtigt? :-)

grez
msch


newbie44 - Fr 23.07.04 18:25

Frage zu Streams,

kann ich die irgendwie programmieren, das diese ab einen gewissen punkt beginnen, z. B. In der Datei steht nochwas davor, z. B.

HalloHalloHallo, ich möchte die Position des letzten o's bestimmen und ab dort bis 0x0017 schreiben, geht das irgendwie?

gruß

sebby :?:


MSCH - Fr 23.07.04 18:27

Schau dir die Funktionen von Streams an; z.b. Seek(...).

grez
msch


newbie44 - Fr 23.07.04 19:14

@ Mash

Danke für die Infos, Seek() ist schon richtig, nur die Position ist mal weitervorne und mal weiterhinten. Wie sage ich delphi, das er am ende beginnen soll soviele P's bis eben zu der adresse 0x0017 zu schreiben, ich hab keine Ahnung, die funktionen hab ich mir schon angeguckt.

Gruß

Sebby :lol:


newbie44 - Sa 24.07.04 10:28

Moin,

gut, ich hab folgendes herausgefunden, man kann die Startposition berrechnen indem man 3 + den Streckennamen zusammenzählt und 1 wieder abzieht, das ist dann die position wo das beginnt. Bis dahin noch kein problem, aber die funktion mit der man nur bis zu einer gewissen stelle schreiben kann, hab ich leider noch nicht gefunden. wäre gut wenn mir einer auf die sprünge helfen würde

Gruß

Sebby :?: :dance:


newbie44 - Sa 24.07.04 10:55

Gut, ich hab mal was das Thema Streams andere Beiträge gelesen, so richtig schlau bin ich aber trotzdem nicht daraus geworden :!:

Ich weiß jetzt wie ich den Startpunkt berrechne Ich rechne einfach 02 + die Name strecke das Zähle ich dann zu 0x00 einfach dazu. Ich muss dann bis 0x0017 das ganze irgendwie mit P's füllen, aber ich habe leider noch keine funktion dazu gefunden nur bis zu einer bestimmten Stelle zu schreiben. :cry:

Gruß

Sebby :roll:


highhatcompy - Sa 24.07.04 11:02

Hallo,
du weisst doch aber den Abstand bis zur 0x0017, mach eine For..Next Schleife mit der entsprechenden Anzahl Durchläufe und schreibe darin deine P's.

Bye


Christian S. - Sa 24.07.04 12:23

Hallo!

Ich habe hier zwei Thread vereinigt, da die Fragen von newbie44 da sehr ähnlich waren. Es kann also sein, dass da mal ein Posting zeitverschoben erscheint. Lässt sich leider nicht ändern.

MfG
Peter


newbie44 - Sa 24.07.04 17:08

Allgemeine Frage zu delphi,

wie spreche ich den Text des members TLabelededit als String an?

Ich brauche diese Funktion dringend.


Könnte mir nicht jemand einen Tipp oder Code geben, bin für jede Hilfe dankbar


Sebby :( :?:


Christian S. - Sa 24.07.04 17:18

Neue Frage -> Neuer Thread! :mahn:


newbie44 - Sa 24.07.04 17:20

Peter Lustig hat folgendes geschrieben:
Neue Frage -> Neuer Thread! :mahn:


Weißt du nicht was du willst?, es geht weiterhin um das Thema, wiso soll ich denn dann einen neuen Theard erstellen, wenn es auch in diesen geht?

Gruß

Sebby :?: :shock:


Christian S. - Sa 24.07.04 17:24

Zitat:
wie spreche ich den Text des members TLabelededit als String an?
Das ist ja wohl kaum das Thema dieses Threads, oder? Da geht es um Ver- und Entschlüsseln im Zusammenhang mit Dateizugriff. Das ist etwas völlig anderes als die Eigenschaften einer Komponente anzusprechen! Alles weitere per PN!


newbie44 - Sa 24.07.04 17:26

Nicht so schlimm,

habe doch einen neuen Theard eröffnet. Ich will nicht umbedingt mit einem Profi anlegen.

Gruß


Sebby :lol: 8) :P


highhatcompy - Di 27.07.04 11:18

Hallo,
jetzt gehts los!!!

1. Lesen eine Bin Datei mit TMemoryStream:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
...
var
   bin: TMemoryStream;
   b: byte;
   z: integer;

begin
     bin:=TMemoryStream.Create();#
     bin.LoadFromFile('my.bin');
     z:=0;
     while z <= bin.Size do
     begin
          bin.read(b,sizeof(byte));
          memo1.lines.add(inttostr(b));
          inc(z);
     end;
     bin.Free;
end;
...

Die Ausgabe erfolgt in einer Memokompo, kann man auch schöner lösen!

2. Schreiben in ein Bin Datei mit TMemoryStream:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
...
var
   bin: TMemoryStream;
   b: byte;
   z: integer;

begin
     bin:=TMemoryStream.Create();
     bin.LoadFromFile('my.bin');
     bin.Seek(strtoint('0x'+edit1.text);
     b:=strtoint('0x'+edit2.text);
     bin.write(b,sizeof(byte));
     bin.SaveToFile('my.bin');
     bin.Free;
end;
...

Die Werte kommen aus 2 Editkompo's als Eingabe werden Hexwerte benötigt( z.B. A1 od. FF, aber nicht 0xA1 od. A1h). Edit1 benötigt das offset vom Dateianfang als Hexwert. Wenn man das 12. Byte der Datei ändern möchte muss die Eingabe 0C lauten usw.
Edit2 beinhaltet den Wert der in die Datei geschrieben werden soll.

Habe zur besseren Übersicht kein Sicherungen eingebaut(try..except und so).

Ich hoffe ich konnte helfen.

Danke newbie44, wenn du nicht so gebohrt :lol: hättest, hätte ich mich nie mit Streams beschäftigt, jetzt weiß ich wie es geht! Danke!! :wink:

HHC


newbie44 - Di 27.07.04 11:50

Danke für deine Bemühungen :)

wo muss ich das ganze jetzt einsetzten? Nach dem ich den Header geschrieben habe?. Hast du die Anleitung zum schreiben der Datei bekommen? Wenn ja, wie empfehlst du mir vorzugehen?

Danke schon im Vorraus für die Infos

Gruß

Sebby aus der MZ innenstadt :) :D :wink: :!:


highhatcompy - Mi 28.07.04 05:29

Na DU,

also einfacher kann ich es dir wirklich nicht machen! Du änderst einfach ab dem Offset die gewünschten Bytes und dann wirds wohl gehen. Wenn du willst das ich dir das komplette Programm Code, dann mußt du schon däfür löhnen!

HHC