![]() |
AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen
Je nachdem ob LITTLEENDIAN oder BIGENDIAN gespeichert wurde, werden die gelesenen Bytes in einer anderen Reihenfolge ausgegeben.
Du mußt nur wissen wie abgespeichert wurde. Gruß K-H |
AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen
Zitat:
Delphi-Quellcode:
In meinen vorliegenden Beispielen ist die ByteOrder 0 also LITTLE ENDIAN.
procedure TForm1.Button2Click(Sender: TObject);
var fs: TFilestream; ByteOrder:byte; begin fs:=TFilestream.Create(edit1.Text,fmopenread); fs.Position:=80; fs.ReadBuffer(ByteOrder,1); case ByteOrder of 0 : Listbox1.Items.add('BYTE ORDER: LITTLE ENDIAN'); 1 : Listbox1.Items.add('BYTE ORDER: BIG ENDIAN'); else Listbox1.Items.add('WARNUNG! BYTE ORDER UNKLAR'); end; fs.free; end; |
AW: [nicht-Profi] Datentyp auf bestimmte Weise darstellen
ich habe inzwischen einige funktionen geschrieben um einzelne bereiche der daten auszulesen...
ich bin aber nicht so wirklich geübt im erstellen von Funktionen, klassen und so, deshalb wäre ich für etwas feedback oder Hinweise was ich noch beachten muß dankbar: so sieht das zum beispiel jetzt aus:
Delphi-Quellcode:
Konkrete Fragen formuliere ich mal hier:
type
TJupTeReader = class(TObject) public class function getVersion (fs : Tfilestream) :string; class function getByteOrder (fs : Tfilestream) :shortint; class function getI32 (fs : TFilestream; pos : integer) :integer; class function getU32 (fs : TFilestream; pos : integer) :Longword; class function getMyGUID (fs : TFilestream; pos : integer) :TGUID; end; implementation class function TJupTeReader.getVersion(fs: TFilestream):string; var i:integer; var bufferchar:char; var ResultStr:string; begin for i := 0 to 79 do begin fs.Position:=i; fs.Readbuffer(bufferchar,1); ResultStr:=ResultStr+char(bufferchar); end; result:=ResultStr; end; class function TJupTeReader.getByteOrder(fs: Tfilestream):shortint; var ByteOrder:byte; ResultByteOrder:shortint; begin fs.Position:=80; fs.ReadBuffer(ByteOrder,1); if (ByteOrder=0) or (ByteOrder=1) then ResultByteOrder:=ByteOrder else ResultByteOrder:=-1; Result:=ResultByteOrder; end; class function TJupTeReader.getI32(fs: TFileStream; pos : integer):integer; begin fs.Position:=pos; fs.ReadBuffer(Result,4); end; class function TJupTeReader.getU32(fs:TFilestream; pos:integer):Longword; begin fs.Position:=pos; fs.ReadBuffer(Result,4); end; class function TJupTeReader.getMyGUID (fs : TFilestream; pos : integer) :TGUID; begin fs.Position:=pos; fs.read(Result,16); end; 1.) ist es überhaupt geschickt einen filestream zu übergeben um einzelne bereiche auszulesen? 2.) Mit der Funktion U32 soll ein unsigned 32 bit integer value geladen werden, deshalb habe ich LongWord gewählt, hätte ich auch Cardinal nehmen können oder sogar müssen? 3.) für ein Attribut soll ich an einer bestimmten stelle ein U32 einlesen, jetzt heisst es aber zur Interpretation des Atributes wie folgt: Zitat:
4.) nochmal eine delphi frage: ich rufe die einzelnen funktionen jetzt von ausserhalb etwa so auf:
Delphi-Quellcode:
was irgendwie umständlich aussieht.. gibt es dafür etwas besseres?
entrycount:=TJupteReader.getI32(testfs,TocOffset).
ich danke schonmal für eure Hilfe und Anregungen. bitte habt Nachsicht mit mir :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz