unit hex; { This unit provides routines for converting decimal numbers into their hexidecimal } { equivalents. The hex values are represented as strings. } { } { Copyright © 1997 by Michael J. Gibbs, all rights reserved. } interface uses types, ToolUtils; function nibble2Hex (n: longint): char; { convert 4 bit integer to hex } function byte2Hex (n: longint): str255; { convert 8 bit integer to hex } function int2Hex (n: longint): str255; { convert 16 bit integer to hex } function long2Hex (n: longint): str255; { convert 32 bit integer to hex } function hex2Long (theHex: str255): longint; { convert hex string to 32 bit integer } implementation function nibble2Hex (n: longint): char; begin if n < 10 then nibble2Hex := chr(n + ord('0')) else nibble2Hex := chr(n - 10 + ord('A')); end; function byte2Hex (n: longint): str255; var s: str255; begin s := nibble2Hex(n div 16); s := concat(s, nibble2Hex(n mod 16)); byte2Hex := s; end; function int2Hex (n: longint): str255; var s: str255; begin if n < 0 then n := n + 65536; s := nibble2Hex(n div 4096); n := bitand(n, $0FFF); s := concat(s, nibble2Hex(n div 256)); n := bitand(n, $00FF); s := concat(s, nibble2Hex(n div 16)); n := bitand(n, $000F); s := concat(s, nibble2Hex(n)); int2Hex := s; end; function long2Hex (n: longint): str255; var hiPart, loPart: longint; s: str255; begin hiPart := hiWord(n); if hiPart < 0 then hiPart := hiPart + 65536; loPart := loWord(n); if loPart < 0 then loPart := loPart + 65536; s := int2Hex(hiPart); s := concat(s, int2Hex(loPart)); long2Hex := s; end; function hex2Long (theHex: str255): longint; var n: longint; x: integer; begin n := 0; if theHex <> '' then begin for x := 1 to length(theHex) do if theHex[x] in ['0'..'9'] then n := n * 16 + ord(theHex[x]) - 48 else if theHex[x] in ['A'..'Z'] then n := n * 16 + ord(theHex[x]) - 55 else n := n * 16 + ord(theHex[x]) - 87; end; hex2Long := n; end; end.