Главная » Delphi » Модуль Ariphm

0

В обычном Pascal и первых вариантах Object Pascal шестнадцатеричное представление чисел можно было осуществлять только в одностороннем порядке: вы могли в тексте программы использовать записи с предваряющим знаком "$", однако вывести числа в той же форме не получалось. Для преодоления этого недостатка автором был создан модуль под названием Ariphm, который переводит числа (типа byte, word и longint — последний совместим с типом integer) в строковое представление шестнадцатеричных чисел”. В позднейших версиях появилась функция IntToHex (Value:integer,-Digits:integer), HO автором к тому времени было наработано столько текстов программ, что он по привычке по-прежнему пользуется этим модулем. У функций из модуля есть также мелкое преимущество — они специализированы под определенный тип аргумента и потому требуют всего один параметр (число знаков Digits указывать не требуется). Разумеется, предлагаемые функции в текстах можно без проблем заменить на вызов IntToHex с соответствующим значением параметра Digits (для байта, например, оно должно быть равно 2). Вы можете без изменений использовать текст этого модуля также в DOS- варианте Borland Pascal. Модуль находится на прилагаемом диске в папке Priloz/Ariphm и в составе многих проектов на том же диске, а здесь я воспроизвожу на всякий случай его текст:

UNIT Ariphm; interface

function hexb( dh:byte):string; (перевод байта в HEX} function hexw( dh:word):string; (перевод двухбайтного слова в HEX) Funation hexlong(dh:longint):string; {перевод четырехбайтного слова

в HEX}

implementation

f motion hexb; var d:byte; var ch,cl:char; begin d:=dh; d:=d ahr 4;

if d<10 than ch:=chr(d+48) else if d<16 then ch:=chr(d+55); d:=dh;

d:=d shl 4;d:=d shr 4;

if d<10 then cl:=chr(d+48)

else if d<16 then cl:=chr(d+55);

hexb:=ch+cl

end;

function hexw; var d:word;

var chl,cll,chO,clO:char; begin d:=dh;

d:=d ehr 12;

if d<10 then chl:=chr(d+48) else if d<16 then chl:=chr(d+55); d:=dh;

d:=d shl 4;d:=d shr 12; if d<10 then ell:=chr(d+48) else if d<16 then ell:=chr(d+55); d:=dh;

d:=d shl 8;d:=d shr 12; if d<10 then chO:=chr(d+48) else if d<16 then chO:=chr(d+55); d:=dh;

d:=d shl 12;d:=d shr 12;

if d<10 then clO:=chr(d+48)

else if d<16 then clO:=chr(d+55);

hexw:=chl+cll+chO+clO;

end;

Function hexlong(dh:longint):string; var d:word; var st:string; begin

d:=word(dh); st:=hexw(d); d:=dh div 65536; hexlong:=hexw(d)+s t ; end;

begin and.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

По теме:

  • Комментарии