Изменить порядок байтов для 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 местами.