[Back to NUMBERS SWAG index]  [Back to Main SWAG index]  [Original]

unit hex;

interface

const hexset : set of char = ['0'..'9','A'..'F'];
      hexChars: array [0..$F] of Char = '0123456789ABCDEF';

type bytestr=string[2];
     wordstr=string[4];
      binstr=string[8];

function Byte2Str(b: byte):bytestr;
function Word2Str(w: Word):wordstr;
function Bin2Str(b:byte):binstr;
function Str2Bin(s:binstr):byte;
function Str2Byte(s:bytestr; var c:boolean):byte;
function Str2Word(s:wordstr; var c:boolean):word;

implementation

{ --------------------------------------------------------------------
  BYTE2STR (modification of WORD2STR)
  by Emil Mikulic

  Input:
   b - a byte

  Output:
   string - the hex string of b
  -------------------------------------------------------------------- }
function Byte2Str(b: byte):bytestr;
var temp:bytestr;
begin
 temp:='00';
 temp[1]:=hexChars[b shr 4];
 temp[2]:=hexChars[b and $F];
 Byte2Str:=temp;
end;

{ --------------------------------------------------------------------
  WORD2STR (in the help)
  by Emil Mikulic

  Input:
   b - a word

  Output:
   string - the hex string of b
  -------------------------------------------------------------------- }
function Word2Str(w: Word):wordstr;
var temp:wordstr;
begin
 temp:='0000';
 temp[1]:=hexchars[hi(w) shr 4];
 temp[2]:=hexchars[hi(w) and $F];
 temp[3]:=hexchars[lo(w) shr 4];
 temp[4]:=hexchars[lo(w) and $F];
 Word2Str:=temp;
end;

{ --------------------------------------------------------------------
  BIN2STR
  by Emil Mikulic

  Input:
   b - a byte

  Output:
   string - the binary string of b
  -------------------------------------------------------------------- }
function Bin2Str(b:byte):binstr;
var temp:binstr;
begin
 temp:='00000000';
 if (b and 128>0) then temp[1]:='1';
 if (b and  64>0) then temp[2]:='1';
 if (b and  32>0) then temp[3]:='1';
 if (b and  16>0) then temp[4]:='1';
 if (b and   8>0) then temp[5]:='1';
 if (b and   4>0) then temp[6]:='1';
 if (b and   2>0) then temp[7]:='1';
 if (b and   1>0) then temp[8]:='1';
 Bin2Str:=temp;
end;

{ --------------------------------------------------------------------
  STR2BIN
  by Emil Mikulic

  Input:
   s - a string

  Output:
   byte - the numerical value of binary string s

  Notes:
   STR2BIN is the counterpart of BIN2STR
  -------------------------------------------------------------------- }
function Str2Bin(s:binstr):byte;
var y:byte;
begin
 y:=0;
 if s[1]='1' then y:=y or 128;
 if s[2]='1' then y:=y or 64;
 if s[3]='1' then y:=y or 32;
 if s[4]='1' then y:=y or 16;
 if s[5]='1' then y:=y or 8;
 if s[6]='1' then y:=y or 4;
 if s[7]='1' then y:=y or 2;
 if s[8]='1' then y:=y or 1;
 Str2Bin:=y;
end;

{ --------------------------------------------------------------------
  STR2BYTE
  by Emil Mikulic

  Input:
   s - a string
   c - a variable boolean

  Output:
   byte - the numerical value of hex (byte) s
   c - (modified) true if ok, false if error in conversion
       (such as illegal char being used)

  Notes:
   STR2BYTE is the counterpart of BYTE2STR
  -------------------------------------------------------------------- }
function Str2Byte(s:bytestr; var c:boolean):byte;
var temp:byte;
    i:integer;
begin
 temp:=0;
 c:=true;

 for i:=1 to 2 do if not (s[i] in hexset) then c:=false;

 case s[1] of
   '0': temp:=0;
   '1': temp:=1;
   '2': temp:=2;
   '3': temp:=3;
   '4': temp:=4;
   '5': temp:=5;
   '6': temp:=6;
   '7': temp:=7;
   '8': temp:=8;
   '9': temp:=9;
   'A': temp:=10;
   'B': temp:=11;
   'C': temp:=12;
   'D': temp:=13;
   'E': temp:=14;
   'F': temp:=15;
   end;

 temp:=(temp*16);

 case s[2] of
   '0': temp:=temp+0;
   '1': temp:=temp+1;
   '2': temp:=temp+2;
   '3': temp:=temp+3;
   '4': temp:=temp+4;
   '5': temp:=temp+5;
   '6': temp:=temp+6;
   '7': temp:=temp+7;
   '8': temp:=temp+8;
   '9': temp:=temp+9;
   'A': temp:=temp+10;
   'B': temp:=temp+11;
   'C': temp:=temp+12;
   'D': temp:=temp+13;
   'E': temp:=temp+14;
   'F': temp:=temp+15;
   end;

 Str2Byte:=temp;
end;

{ --------------------------------------------------------------------
  STR2WORD
  by Emil Mikulic

  Input:
   s - a string
   c - a variable boolean

  Output:
   word - the numerical value of hex (word) s
   c - (modified) true if ok, false if error in conversion
       (such as illegal char being used)

  Notes:
   STR2WORD is the counterpart of WORD2STR
  -------------------------------------------------------------------- }
function Str2Word(s:wordstr; var c:boolean):word;
var temp:byte;
    temp2:byte;
    temp3:word;
    i:integer;
begin
 temp:=0;
 temp2:=0;
 temp3:=0;
 c:=true;

 for i:=1 to 4 do if not (s[i] in hexset) then c:=false;

 case s[1] of
   '0': temp:=0;
   '1': temp:=1;
   '2': temp:=2;
   '3': temp:=3;
   '4': temp:=4;
   '5': temp:=5;
   '6': temp:=6;
   '7': temp:=7;
   '8': temp:=8;
   '9': temp:=9;
   'A': temp:=10;
   'B': temp:=11;
   'C': temp:=12;
   'D': temp:=13;
   'E': temp:=14;
   'F': temp:=15;
   end;

 temp:=(temp*16);

 case s[2] of
   '0': temp:=temp+0;
   '1': temp:=temp+1;
   '2': temp:=temp+2;
   '3': temp:=temp+3;
   '4': temp:=temp+4;
   '5': temp:=temp+5;
   '6': temp:=temp+6;
   '7': temp:=temp+7;
   '8': temp:=temp+8;
   '9': temp:=temp+9;
   'A': temp:=temp+10;
   'B': temp:=temp+11;
   'C': temp:=temp+12;
   'D': temp:=temp+13;
   'E': temp:=temp+14;
   'F': temp:=temp+15;
   end;

 case s[3] of
   '0': temp2:=0;
   '1': temp2:=1;
   '2': temp2:=2;
   '3': temp2:=3;
   '4': temp2:=4;
   '5': temp2:=5;
   '6': temp2:=6;
   '7': temp2:=7;
   '8': temp2:=8;
   '9': temp2:=9;
   'A': temp2:=10;
   'B': temp2:=11;
   'C': temp2:=12;
   'D': temp2:=13;
   'E': temp2:=14;
   'F': temp2:=15;
   end;

 temp2:=temp2*16;

 case s[4] of
   '0': temp2:=temp2+0;
   '1': temp2:=temp2+1;
   '2': temp2:=temp2+2;
   '3': temp2:=temp2+3;
   '4': temp2:=temp2+4;
   '5': temp2:=temp2+5;
   '6': temp2:=temp2+6;
   '7': temp2:=temp2+7;
   '8': temp2:=temp2+8;
   '9': temp2:=temp2+9;
   'A': temp2:=temp2+10;
   'B': temp2:=temp2+11;
   'C': temp2:=temp2+12;
   'D': temp2:=temp2+13;
   'E': temp2:=temp2+14;
   'F': temp2:=temp2+15;
   end;

 temp3:=temp*256+temp2;

 Str2Word:=temp3;
end;

{var x:boolean;
begin
 clrscr;
 writeln(word2str($1234));
 writeln(word2str($ABCD));
 writeln(byte2str($CA));
 writeln(bin2str(255));
 writeln(bin2str(128));
 writeln(bin2str(15));
 writeln(bin2str(16));
 writeln;
 writeln(Byte2Str(Str2Bin(Bin2Str(255))));
 writeln;
 writeln(Str2Byte('AB',x));
 writeln;
 writeln(Str2Word('1234',x));}
end.

[Back to NUMBERS SWAG index]  [Back to Main SWAG index]  [Original]