Раздел: Стандартные функции Паскаля
Функция BEtoN
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Функция BEtoN преобразует числа формата big-endian
в числа с нормальным порядком байтов для текущего процессора. Синтаксис:
function BEtoN(const AValue : SmallInt) : SmallInt; function BEtoN(const AValue : Word) : Word; function BEtoN(const AValue : LongInt) : LongInt; function BEtoN(const AValue : DWord) : DWord; function BEtoN(const AValue : Int64) : Int64; function BEtoN(const AValue : QWord) : Qword;
big-endian – порядок байтов в больших числах от старшего к младшему. То есть побайтовая запись числа начинается от старшего байта и заканчивается младшим.
little-endian – порядок байтов от младшего к старшему (такой порядок иногда называют «интеловский порядок»).
Порядок байтов при формировании числа зависит от процессора.
Функция переставляет байты big-endian
числа в такой порядок, который
принят в текущем процессоре. Это означает, что если процессор, который выполняет
программу, имеет порядок байтов big-endian
, то функция BEtoN ничего не
будет делать. Если же процессор имеет порядок байтов little-endian
,
то функция будет инвертировать порядок байтов.
Процессоры Intel и совместимые имеют порядок little-endian
, поэтому на таких процессорах функция BEtoN будет переставлять байты в числе. Поможет убедиться в этом следующий пример:
program betonfunc; uses SysUtils; var x : Word; z : DWord; begin x := 1000; z := x * x * x; //Будет выведено 03E8 Write(IntToHex(x, 4), #10#13); x := BEtoN(x); //Будет выведено E803 Write(IntToHex(x, 4), #10#13); //Будет выведено 3B9ACA00 Write(IntToHex(z, 8), #10#13); z := BEtoN(z); //Будет выведено 00CA9A3B Write(IntToHex(z, 8), #10#13); ReadLn; end.
Эта функция будет особенно полезна тем, кто занимается автоматизацией производства и пишет собственные SCADA-системы или просто какие-то небольшие программы, которые читают данные от контроллеров или датчиков.
Дело в том, что очень часто промышленные контроллеры или числа, передаваемые цифровыми датчиками, имеют прямой порядок байтов в числе. В то время как компьютеры с процессорами Интел и совместимыми имеют обратный порядок байтов.
Следовательно, получив от контроллера или датчика число, например, такое (в шестнадцатеричной системе):
001F
и преобразовав его в десятичное, вы получите число 31.
Но если вы просто прочитаете это число на вашем компьютере с процессором Интел и выведите его на экран, то получите 7936, потому что процессор Интел на вашем компьютере неправильно понял это число - ведь с его точки число надо читать от младшего байта к старшему (то есть как 1F00).
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |