AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hex <--> Binär- / Dualzahl ???

Ein Thema von Qnkel · begonnen am 1. Apr 2006 · letzter Beitrag vom 1. Apr 2006
Antwort Antwort
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#1

Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:20
Hallo.

Ich weiß solche Fragen warn hier schon oft, ich hab au die Suche redlich bemüht, kam aber auf keinen grünen Zweig.

Ich suche 2 ganz einfache Funktionen, die mir Hex in eine 8stellige Dualzahl umrechnen und umgekehrt!

Ne einfache Funktion wo ich Hex(03) reinwerfe und Dual(00000011) rausbekomme und umgekehrt, also Dual(00000011) rein und Hex(03) raus.

Brauche das für ZLPortIO.

Vielen Dank für die Hilfe im Voraus.
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:24
Hai Qnkel,

schaue Dir doch mal Delphi-Referenz durchsuchenHexToBin() und Delphi-Referenz durchsuchenBinToHex aus der Unit Classes an
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:26
Zitat von Sharky:
Hai Qnkel,

schaue Dir doch mal Delphi-Referenz durchsuchenHexToBin() und Delphi-Referenz durchsuchenBinToHex aus der Unit Classes an
Hab ich schon. Bei HexToBin kommmt aus '03' ';B' und son kram raus und sonst stürzt da iwie mein Programm total ab jedesmal... ich bin echt zu doof anscheinend...
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Alloc

Registriert seit: 18. Apr 2005
Ort: Griesheim
167 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:35
Hi, hier mal meine eigenen kleinen Routinen für Hex->Long, Byte->Bin, Bin->Byte. Sry wegen der Schreibweise, ist noch älterer Code von mir, wo ich bissl anderen Stil hatte

Hex->Bin: IntToBin(HexToLong(hex));
Bin->Hex: IntToHex(BinToInt(bin),Hex-Stellenanzahl);

Delphi-Quellcode:
FUNCTION HexToLong(hex:String):LongWord;
  FUNCTION NormalizeHexString(VAR hex:String):Boolean;
    VAR
      i:Byte;
    BEGIN
      IF hex[1]='$THEN BEGIN
        FOR i:=1 TO Length(hex)-1 DO BEGIN
          hex[i]:=hex[i+1];
        END;
        SetLength(hex, Length(hex)-1);
      END;
      IF (hex[1]='0') AND (UpCase(hex[2])='X') THEN BEGIN
        FOR i:=1 TO Length(hex)-2 DO BEGIN
          hex[i]:=hex[i+2];
        END;
        SetLength(hex, Length(hex)-2);
      END;
      IF Length(hex)=0 THEN
        Result:=False
      ELSE
        Result:=True;
    END;
  VAR
    i:Byte;
  BEGIN
    IF NormalizeHexString(hex) THEN BEGIN
      hex:=UpperCase(hex);
      Result:=0;
      FOR i:=1 TO Length(hex) DO BEGIN
        Result:=Result SHL 4;
        CASE hex[i] OF
          '0'..'9': Result:=Result+Ord(hex[i])-48;
          'A'..'F': Result:=Result+Ord(hex[i])-55;
        ELSE
          Result:=0;
          Exit;
        END;
      END;
    END ELSE BEGIN
      Result:=0;
    END;
  END;

FUNCTION BinToInt(bin:String):Byte;
  VAR
    Add: Integer;
    i: Byte;
  BEGIN
    Result:=0;
    IF Length(bin)<>8 THEN Exit;
    Add:=1;
    FOR i:=8 DOWNTO 1 DO BEGIN
      IF NOT (bin[i] IN ['0','1']) THEN Exit;
      IF bin[i] = '1THEN Inc(Result,Add);
      Add:=Add SHL 1;
    END;
  END;

FUNCTION IntToBin(value:Byte):String;
  VAR
    i:Byte;
  BEGIN
    SetLength(Result,8);
    FOR i:=7 DOWNTO 0 DO BEGIN
      Result[i+1]:=Char((value AND $01)+48);
      value:=value SHR 1;
    END;
  END;
mfG, Chris
Christian Illy
ONI2.net, basicly every important link about Oni.
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:41
Vielen Dank!

Aber trotzdem möchte ich hier mal HexToBin etc klärn

Hab das hier ma geschrieben zum basteln:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  a := '3f';
  HexToBin(PChar(a), b, Sizeof(b));
  ShowMessage(b);
end;
wenn ich a auf '3' setze, is die Ausgabe leer, wenn ichs auf '3f' setze verabschiedet sich das Programm total mmit Zugriffsverletzung etc...
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#6

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:45
Kleines Beispiel.

Delphi-Quellcode:
function ConvertHex2Dec(const Source: String; var Dest: String): Integer;
var
  Buffer: PChar;
  Len: Integer;
begin
  Len := (Length(Source) div 2) +1;
  GetMem(Buffer, Len);
  ZeroMemory(Buffer, Len);
  try
    Result := HexToBin(PChar(LowerCase(Source)), Buffer, Len);
    Dest := Buffer;
  finally
    FreeMem(Buffer);
  end;
end;
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 11:54
Delphi-Quellcode:
function ConvertHex2Dec(const Source: String; var Dest: String): Integer;
var
  Buffer: PChar;
  Len: Integer;
begin
  Len := (Length(Source) div 2) +1;
  GetMem(Buffer, Len);
  ZeroMemory(Buffer, Len);
  Result := HexToBin(PChar(LowerCase(Source)), Buffer, Len);
  Dest := Buffer;
  FreeMem(Buffer);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ConvertHex2Dec('3f', a);
  ShowMessage(a);
end;
Ganz nett. a is jetz '?' oder bei 'f3' nen griechischer Buchstabe. Das hatte ich noch nicht

Oh man spinnt mein Delphi oder was... werd noch wahnsinnig
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#8

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 12:02
3f ist die 63 und das ist die ascii-Nummer für das Fragezeichen.

Versuch mal
48616C6C6F
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 12:11
Hallo Qnkel,

die folgenden Routinen erwarten/liefern den Hex-Wert in einem Byte und die Dualzahl in einem String:

Delphi-Quellcode:
function ByteToDual (aValue: Byte): string;
var i: integer;
begin
  SetLength (Result, 8);
  for i := 0 to 7 do
    Result[8 - i] := Char(48 + ((aValue shr i) and 1));
end;

function DualToByte (const aValue: string): Byte;
var i: integer;
begin
  Result := 0;
  for i := 1 to Length(aValue) do
    Result := 2 * Result + Ord(aValue[i] = '1');
end;
Aufruf z.B. mit:

Delphi-Quellcode:
s := ByteToDual($03);
b := DualToByte('00010011');
Gruß Hawkeye
  Mit Zitat antworten Zitat
Qnkel

Registriert seit: 14. Mär 2004
114 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Hex <--> Binär- / Dualzahl ???

  Alt 1. Apr 2006, 13:21
Super Hawkeye, genau das brauche ich. Perfekt für ZLPortIO.

Danke an die Erklärung mit dem ASCII-Zeichen Logisch. Aber das ASCII brauch ich ja net *Gg*
Lazarus v0.9.29 (2010-10-31 SVN 28000)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz