``````
{  You've probably seen a lot of code to convert a number to HEX.
Here is one that will take a hex String and covert it back to a number

The conversion is back to type LONGINT, so you can covert to WORDS or
BYTES by simply declaring your whatever varible you want }

{\$V-}
USES CRT;

VAR
A   : LONGINT;
B   : WORD;
C   : BYTE;
D   : WORD;

{ ---------------------------------------------------------------------- }

FUNCTION HexToLong(S : STRING) : LONGINT;

FUNCTION ANumBin (B : STRING) : LONGINT; Assembler;
ASM
LES DI, B
XOR CH, CH
MOV CL, ES : [DI]
ADD DI, CX
MOV AX, 0
MOV DX, 0
MOV BX, 1
MOV SI, 0
@LOOP :
CMP BYTE PTR ES : [DI], '1'
JNE @NotOne
ADD AX, BX   {add power to accum}
ADC DX, SI
@NotOne :
SHL SI, 1      {double power}
SHL BX, 1
ADC SI, 0
DEC DI
LOOP @LOOP
END;

CONST
HexDigits : ARRAY [0..15] OF CHAR = '0123456789ABCDEF';
Legal     : SET OF Char = ['\$','0'..'9','A'..'F'];
BinNibbles : ARRAY [0..15] OF ARRAY [0..3] OF CHAR = (
'0000', '0001', '0010', '0011',
'0100', '0101', '0110', '0111',
'1000', '1001', '1010', '1011',
'1100', '1101', '1110', '1111');

VAR I : BYTE;
O : STRING;

BEGIN
O := '';
HexToLong := 0;       { Returns zero if illegal characters found }
IF S = '' THEN EXIT;
FOR I := 1 TO LENGTH(S) DO
BEGIN
IF NOT (S[i] in LEGAL) THEN EXIT;
O := O + binNibbles[PRED(POS(S[i],Hexdigits))];
END;
HexToLong := ANumBin(O)
END;

{ ---------------------------------------------------------------------- }

BEGIN
ClrScr;
A   := HexToLong('\$02F8');
B   := HexToLong('\$0DFF');
C   := HexToLong('\$00FF');   { The biggest byte there is !! }
D   := HexToLong('');   { this is ILLEGAL !! .. D will be ZERO }
WriteLn(A,' ',B,' ',C,' ',D);
END.
``````