Entwickler-Ecke

Open Source Units - Hexadezimalzahlen in Dualzahlen umwandeln und umgekehrt


azubi_20 - Di 20.06.06 11:22
Titel: Hexadezimalzahlen in Dualzahlen umwandeln und umgekehrt
Hallo,

das ist zwar keine Unit, sondern nur 2 Funktionen, aber vielleicht sind sie für jemanden brauchbar :)

Zur Erklärung :


Delphi-Quelltext
1:
function HexToDual(sHex:String):String;                    

... erwartet als Parameter eine Hexadezimalzahl als String und gibt die passende Dualzahl als String mit Leerzeichen zwischen den Nibbles aus. Ist der Eingabeparameter keine gültige Hexadezimalzahl, ist das result eine entsprechende Meldung.


Delphi-Quelltext
1:
function DualToHex(sdual:String):String;                    

... erwartet als Parameter eine Dualzahl als String und gibt die passende Hexadezimalzahl als String aus. Ist der Eingabeparameter keine gültige Dualzahl, ist das result eine entsprechende Meldung.


Hier die Funktionen :


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
function HexToDual(sHex:String):String;
{
--> Hexzahl als String
<-- result = Dualzahl als String
}

var
  i: Integer;
begin
//jedes Zeichen durchgehen und dem entsprechendem Nibble zuordnen
for i := 1 to length(shex) do
  begin
    case shex[i] of
    '0' : result := result + '0000 ';
    '1' : result := result + '0001 ';
    '2' : result := result + '0010 ';
    '3' : result := result + '0011 ';
    '4' : result := result + '0100 ';
    '5' : result := result + '0101 ';
    '6' : result := result + '0110 ';
    '7' : result := result + '0111 ';
    '8' : result := result + '1000 ';
    '9' : result := result + '1001 ';
    'A' : result := result + '1010 ';
    'B' : result := result + '1011 ';
    'C' : result := result + '1100 ';
    'D' : result := result + '1101 ';
    'E' : result := result + '1110 ';
    'F' : result := result + '1111 ';
    else //ungültiges Zeichen
      begin
      Result := sHex + ' ist keine gültige Hexadezimalzahl';
      exit;
      end;
    end;
  end;
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
function DualToHex(sDual:String):String;
{
--> Dualzahl als String
<-- result = Hexzahl als String
}

var
  i: Integer;
  nNibble : Integer;
  nibble: string;
  tmpHex: string;
  sHex: string;
begin
// Wenn Anzahl der Zeichen nicht durch 4 teilbar,
// dann entsprechend viele Nullen voranstellen
  if length(sdual) mod 4 > 0 then
    for i := 1 to (4 - (length(sdual) mod 4)) do
      sdual := '0' + sdual;

  sHex := ''//sHex intitialisieren

  nNibble := ((length(sdual) div 4));  //Anzahl der Nibble

  for i := 1 to nNibble do
  begin
    //Nibble aus sdual extrahieren
    nibble := copy(sdual, ((i-1) * 4) +1 , 4);

   // Nibble dem entsprechendem Hex-Wert zuordnen
    if nibble = '0000' then
      tmpHex := '0'
    else if nibble = '0001' then
      tmpHex := '1'
    else if nibble = '0010' then
      tmpHex := '2'
    else if nibble = '0011' then
      tmpHex := '3'
    else if nibble = '0100' then
      tmpHex := '4'
    else if nibble = '0101' then
      tmpHex := '5'
    else if nibble = '0110' then
      tmpHex := '6'
    else if nibble = '0111' then
      tmpHex := '7'
    else if nibble = '1000' then
      tmpHex := '8'
    else if nibble = '1001' then
      tmpHex := '9'
    else if nibble = '1010' then
      tmpHex := 'A'
    else if nibble = '1011' then
      tmpHex := 'B'
    else if nibble = '1100' then
      tmpHex := 'C'
    else if nibble = '1101' then
      tmpHex := 'D'
    else if nibble = '1110' then
      tmpHex := 'E'
    else if nibble = '1111' then
      tmpHex := 'F'
    else begin
    // ungültiger Nibble
      result := sdual + ' ist keine gültige Dualzahl';
      exit;
      end;
    // Hex-Wert wird zusammengesetzt
    sHex := sHex + tmpHex;
  end;
  result := sHex;
end;


jasocul - Di 20.06.06 11:33

Sowas ähnliches haben wir schon. Guggst du hier [http://www.delphi-library.de/topic_Zahlen+von+jeder+Basis+236+in+eine+andere+umrechnen_38507.html]. Trotzdem ein schöner Ansatz. :zustimm: