Thema: Delphi Bytes im Word drehen

Einzelnen Beitrag anzeigen

Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Bytes im Word drehen

  Alt 24. Nov 2014, 16:33
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! <<

Geändert von Helmi (24. Nov 2014 um 16:40 Uhr)
  Mit Zitat antworten Zitat