[gelöst] Integer -> Byte Konvertierung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

[gelöst] Integer -> Byte Konvertierung

Beitrag von Bauer321 »

Ich möchte eine Datei mit dem folgenden Schema schreiben:
Titel 0D0A
irgendwas 09 irgendwas 09 irgendwas 09 irgendwas 0D0A
irgendwas 09 irgendwas 09 irgendwas 09 irgendwas

0D0A -> Zeilenende
09 -> Tab, Trennung der Datensätze

Das geht auch so weit.

Code: Alles auswählen

f: File of Byte;
 
assignfile(f, path);
rewrite(f); 
write(f, ord(title[n])); (title ist ein String den ich via forschleife byte für byte schreibe)
write(f, $0D); //Die beiden Zeilen zusammen sind ein Zeilenende
write(f, $0A);
closefile(f);
was nicht geht ist aber das schreiben eines Integers. Meine erste Idee war folgende:
eine Variable (tmp) dann den Integer in einen String konvertieren tmp := IntToStr(i); -> dann write(f, ord(tmp[n])); (wie oben)
Das geht aber leider nicht.
Auch nicht funktionieren tut write(f, i); (i ist ein Integer wert zwischen 1 und 15)
Zuletzt geändert von Bauer321 am Di 29. Jan 2013, 20:56, insgesamt 2-mal geändert.
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Integer -> Byte Konvertierung

Beitrag von theo »

Willst du nicht lieber TFileStream verwenden? Das wäre komfortabler.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Integer -> Byte Konvertierung

Beitrag von Bauer321 »

Mir fehlt jetzt so eigentlich nur noch das Speichern der Integer Werte. Und ich würde es gerne erstmal auf diese Art fertigstellen, hab noch genügend anderes zu tun ;)
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Integer -> Byte Konvertierung

Beitrag von theo »

Ich kann nicht nachvollziehen, warum du eine Textdatei in einem File of Byte speichern willst.
Das kann eine TStringList total problemlos.
Wie kommt denn der Integer jetzt ins Spiel? Davon sehe ich in deinem Beispiel nichts.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Integer -> Byte Konvertierung

Beitrag von Scotty »

Je nachdem, was du bzw. dein OS/Compiler unter Integer verstehst, ist Lo()/Hi() dein Freund. Beide sind IMHO nur Makros für bitshiftings, d.h. hi = <int16> shr 8 und lo =<int16> and 256.
http://lazarus-ccr.sourceforge.net/docs ... em/lo.html

PS: Abgesehen davon, dass theo recht hat, gibt es auch noch typisierte Dateien. Und verschlüsseln geht auch besser...

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Integer -> Byte Konvertierung

Beitrag von Bauer321 »

Ich hab keine Ahnung woran es lag, aber genau das was ich vorhin versucht habe geht jetzt auf einmal :o

Code: Alles auswählen

tmp := IntToStr(p^.mark[x]);
write(f, $09);
for n := 1 to length(tmp) do write(f, Ord(tmp[n]));
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Integer -> Byte Konvertierung

Beitrag von theo »

Bauer321 hat geschrieben:Ich hab keine Ahnung woran es lag, aber genau das was ich vorhin versucht habe geht jetzt auf einmal :o

Code: Alles auswählen

tmp := IntToStr(p^.mark[x]);
write(f, $09);
for n := 1 to length(tmp) do write(f, Ord(tmp[n]));
Wenn man es umständlich und merkwürdig mag... :wink:

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: [gelöst] Integer -> Byte Konvertierung

Beitrag von Bauer321 »

ich weiß das es auch anders geht aber ich will das in diesem Fall so haben.

Ich verstehe auch das du eine andere Lösung bevorzugen würdest.
www.mcpatcher.net | www.hoeper.me

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Integer -> Byte Konvertierung

Beitrag von Socke »

Scotty hat geschrieben:Je nachdem, was du bzw. dein OS/Compiler unter Integer verstehst, ist Lo()/Hi() dein Freund. Beide sind IMHO nur Makros für bitshiftings, d.h. hi = <int16> shr 8 und lo =<int16> and 256.
http://lazarus-ccr.sourceforge.net/docs ... em/lo.html
Die beiden Funktionen entsprechen einem direkten Zugriff auf die entsprechenden Speicherteile des übergebenen Datentyps und sind daher kein Bitshifting. Der Rückgabetyp ist nur halb so lang wie der Eingangsparameter. Bei Bitshifting wäre er gleich lang.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten