Согласие на обработку персональных данных.

17.09.2018
Новая задача Как определить порядковый номер символа.

07.09.2018
Новый выпуск журнала Автоматизация и программирование.

26.08.2018
Новые видео и статья Как закрепить окна в IDE Lazarus.

18.08.2018
Новая задача Сколько слайдов поместится в песню.

17.08.2018
Новый раздел: Этюды для программистов.



Раздел: Стандартные функции Паскаля

Функция 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.

Функция BEtoN

Эта функция будет особенно полезна тем, кто занимается автоматизацией производства и пишет собственные SCADA-системы или просто какие-то небольшие программы, которые читают данные от контроллеров или датчиков.

Дело в том, что очень часто промышленные контроллеры или числа, передаваемые цифровыми датчиками, имеют прямой порядок байтов в числе. В то время как компьютеры с процессорами Интел и совместимыми имеют обратный порядок байтов.

Следовательно, получив от контроллера или датчика число, например, такое (в шестнадцатеричной системе):

001F

и преобразовав его в десятичное, вы получите число 31.

Но если вы просто прочитаете это число на вашем компьютере с процессором Интел и выведите его на экран, то получите 7936, потому что процессор Интел на вашем компьютере неправильно понял это число - ведь с его точки число надо читать от младшего байта к старшему (то есть как 1F00).


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика