home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / dos / hex.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-13  |  2.7 KB  |  86 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
  2. (*===================================================================*)
  3. (*                              HEX.PAS                              *)
  4. (* enthält die Konvertierungsfunktionen für Dezimal nach Hexadezimal *)
  5. (*     Alle Funktionen füllen den String auch vorne mit Nullen auf   *)
  6. (*            Copyright (C) 1993 te-wi Verlag, München               *)
  7. (*===================================================================*)
  8.  
  9. UNIT Hex;
  10.  
  11. INTERFACE
  12.  
  13. FUNCTION Byte2Hex(b: BYTE):    STRING;
  14. FUNCTION Word2Hex(w: WORD):    STRING;
  15. FUNCTION Int2Hex(i:  INTEGER): STRING;
  16. FUNCTION Long2Hex(L: LONGINT): STRING;
  17. FUNCTION Ptr2Hex(p:  Pointer; Dollar: BOOLEAN): STRING;
  18.  
  19. IMPLEMENTATION
  20.  
  21. CONST
  22.   HexChars: ARRAY[0..$F] OF CHAR = '0123456789ABCDEF';
  23.  
  24. FUNCTION Byte2Hex(b: BYTE): STRING;
  25. BEGIN
  26.   Byte2Hex[0] := #2;                               (* = ^B           *)
  27.   Byte2Hex[1] := HexChars[b SHR  4];               (* Variante 1 zur *)
  28.   Byte2Hex[2] := HexChars[b AND $F];               (* Umwandlung     *)
  29. END;
  30.  
  31. FUNCTION Word2Hex(w: WORD): STRING;
  32. BEGIN
  33.    Word2Hex := HexChars[Hi(w) DIV $10] +           (* Variante 2 zur *)
  34.                HexChars[Hi(w) MOD $10] +           (* Berechnung     *)
  35.                HexChars[Lo(w) DIV $10] +
  36.                HexChars[Lo(w) MOD $10];
  37. END;
  38.  
  39. FUNCTION Int2Hex(i: INTEGER): STRING;
  40. VAR
  41.   j  : INTEGER;
  42.   Hex: STRING;
  43. BEGIN
  44.    j := Abs(i);
  45.    Hex := HexChars[Hi(j) DIV $10] +
  46.           HexChars[Hi(j) MOD $10] +
  47.           HexChars[Lo(j) DIV $10] +
  48.           HexChars[Lo(j) MOD $10];
  49.   IF i < 0 THEN Hex := '-' + Hex;
  50.   Int2Hex := Hex;
  51. END;
  52.  
  53. FUNCTION Long2Hex(L: LONGINT): STRING;
  54. VAR
  55.   s   : STRING;
  56.   i, j: BYTE;
  57. BEGIN
  58.   s := '';                        (* oder s[0] := #0 oder s[0] := ^@ *)
  59.   REPEAT                                (* Variante 3 zur Berechnung *)
  60.     IF L MOD $10 < 10 THEN s := Chr(L MOD $10 + 48) + s
  61.                       ELSE s := Chr(L MOD $10 + 55) + s;
  62.     L := L DIV $10;
  63.   UNTIL L = 0;
  64.   j := BYTE(s[0]);
  65.   IF j < 10 THEN FOR i := j TO 10 DO s := Concat('0', s);
  66.   Long2Hex := s;
  67. END;
  68.  
  69. FUNCTION Ptr2Hex(p: Pointer; Dollar: BOOLEAN): STRING;
  70. VAR
  71.   WordRec: ARRAY[1..2] OF WORD;
  72.   r1, r2 : STRING;
  73. BEGIN
  74.   Move(p, WordRec, 4);
  75.   r1 := Word2Hex(WordRec[2]);
  76.   r2 := Word2Hex(WordRec[1]);
  77.   IF Dollar THEN Ptr2Hex := '$' + r1 + ':$' + r2
  78.             ELSE Ptr2Hex :=     + r1 + ':'  + r2;
  79.   (*   In BP 7 gibt es den in der Unit Objects definierten Record    *)
  80.   (*   »WordRec« mit dem es wider Erwarten(?) nicht klappt!          *)
  81. END;
  82.  
  83. END.
  84.  
  85. (*===================================================================*)
  86.