Danke - das hab ich gesucht (mir ist immer nur die Step7-Funktion eingefallen
)
Eigentlich musst du somit gar nichts an deinem Code ändern. Die case-Anweisung sollte funktionieren.
Mein Code funktioniert auch. Nur was mich immer daran gestört hat, ist, dass ich in der Case-Anweisung die zwei Bytes "verdreht" gegenüber der Datei hinschreiben hab müssen.
Ich musste neulich auch einmal die Endianess von einem Word ändern, habe mich aber vor System.Swap(..) gefürchtet: Die Doku spricht von Word (2Byte), die Signatur von einem Integer (4Byte).
Echte Delphi-Graurücken schütteln sich da wahrscheinlich das passende Assembler-Kommando aus dem Ärmel, aber ich habe mir (manch einer wird wohl lachen) den hier gemacht:
Delphi-Quellcode:
TWordHelper = record helper for System.Word
/// <summary>
/// Vertauscht beide Bytes
/// </summary>
public procedure flipEndianess();
end;
procedure TWordHelper.flipEndianess();
var
firstBytePtr, secondBytePtr: PByte;
firstByteValue: Byte;
begin
firstBytePtr := Addr(self);
secondBytePtr := firstBytePtr + 1;
firstByteValue := firstBytePtr^;
firstBytePtr^ := secondBytePtr^;
secondBytePtr^ := firstByteValue;
end;
Weil ich sonst einfach nichts besseres gefunden habe. Eigentlich sollte so etwas in den Helferklassen für simple Typen drinstecken. Finde ich.
Danke - aber swap reicht mir
Warum Buffer:WORD, nimm Buffer:BYTE.
FileRead liest Byte-weise.
Ich brauch aber zwei Bytes
mfg
Helmi
>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<