Это старая версия документа!


Изменить порядок байтов для Cardianl

Писал программу работающую с PLC, долго не мог понять почему UInt32 он получает не тот что отправляю, потом осознал что он просто использует другой порядок байт.

Вот простенькая функция которая меняет Big-Endian в Little-Endian и наоборот.

    function SwapEndian32(Value: Cardinal): Cardinal; inline;
    begin
        SwapEndian32 :=
            (($FF000000 and Value) shr 24)
            or (($00FF0000 and Value) shr 8)
            or (($0000FF00 and Value) shl 8)
            or (($000000FF and Value) shl 24);
    end;

Для значений Word и SmallInt можно использовать обычную функцию SysUtils.Swap она просто меняет High и Low местами.

  • works/programmer/delphi/swap-endian.1790035808.txt.gz
  • Последнее изменение: 2026/09/22 00:10
  • Eugene