[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]
{- Yet another implementation (part of my own library): }
{- Built-in assembler used }
const
hex : array[0..$F of Char;
function Byte2Hex( B : Byte) : String; assembler;
asm
les di,@Result
mov al,2
stosb
mov bl,B
xor bh,bh
mov dl,bl
shr bl,1
shr bl,1
shr bl,1
shr bl,1
mov al,byte ptr hex[bx]
mov bl,dl
and bl,$F
mov ah,byte ptr hex[bx]
stosw
end;
function Word2Hex( W : Word) : String; assembler;
asm
les di,@Result
mov al,4
stosb
mov bx,W
mov dx,bx
mov bl,bh
xor bh,bh
mov cl,4
shr bx,cl
mov al,byte ptr hex[bx]
mov bl,dh
and bx,$F
mov ah,byte ptr hex[bx]
stosw
mov bl,dl
xor bh,bh
mov cl,4
shr bx,cl
mov al,byte ptr hex[bx]
mov bl,dl
and bx,$F
mov ah,byte ptr hex[bx]
stosw
end;
function Long2Hex( L : LongInt) : String; assembler;
asm
les di,@Result
mov al,8
stosb
mov bx,word ptr L[2]
mov bl,bh
xor bh,bh
mov cl,4
shr bx,cl
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L[2]
mov bl,bh
and bx,$F
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L[2]
xor bh,bh
mov cl,4
shr bx,cl
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L[2]
and bx,$F
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L
mov bl,bh
xor bh,bh
mov cl,4
shr bx,cl
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L
mov bl,bh
and bx,$F
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L
xor bh,bh
mov cl,4
shr bx,cl
mov al,byte ptr hex[bx]
stosb
mov bx,word ptr L
and bx,$F
mov al,byte ptr hex[bx]
stosb
end;
{- But most reasonable way (for Word parameter) }
{- Note: You must declare DRIVERS unit in USES statement }
function HexWord( W : Word) : String;
var
p : array[0..0] of LongInt;
s : String;
begin
p[0] := W;
FormatStr(s, '%04x', p);
HexWord := s;
end;
{- Example for CRC16 (You can simple expand it for 32): }
function CRC16_To_Str( CRC : Word) : String;
const
hex : array[0..$F] of Char = '0123456789ABCDEF';
var
s : String;
begin
s[0] := #4; {- length of string }
s[1] := Hex[CRC div $1000];
s[2] := Hex[(CRC mod $1000) div $100];
s[3] := Hex[(CRC mod $100) div $10];
s[4] := Hex[CRC mod $10];
CRC16_To_Str := s;
end;
[Back to NUMBERS SWAG index] [Back to Main SWAG index] [Original]