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

Функция BEtoN

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

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

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

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