{- 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;