![]() |
Hex <--> Binär- / Dualzahl ???
Hallo.
:duck: 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. |
Re: Hex <--> Binär- / Dualzahl ???
|
Re: Hex <--> Binär- / Dualzahl ???
Zitat:
|
Re: Hex <--> Binär- / Dualzahl ???
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:
mfG, Chris
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] = '1' THEN 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; |
Re: Hex <--> Binär- / Dualzahl ???
Vielen Dank!
Aber trotzdem möchte ich hier mal HexToBin etc klärn Hab das hier ma geschrieben zum basteln:
Delphi-Quellcode:
wenn ich a auf '3' setze, is die Ausgabe leer, wenn ichs auf '3f' setze verabschiedet sich das Programm total mmit Zugriffsverletzung etc...
procedure TForm1.Button1Click(Sender: TObject);
begin a := '3f'; HexToBin(PChar(a), b, Sizeof(b)); ShowMessage(b); end; |
Re: Hex <--> Binär- / Dualzahl ???
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; |
Re: Hex <--> Binär- / Dualzahl ???
Delphi-Quellcode:
Ganz nett. a is jetz '?' oder bei 'f3' nen griechischer Buchstabe. Das hatte ich noch nicht :-D
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; Oh man spinnt mein Delphi oder was... werd noch wahnsinnig :wall: |
Re: Hex <--> Binär- / Dualzahl ???
3f ist die 63 und das ist die ascii-Nummer für das Fragezeichen. :)
Versuch mal 48616C6C6F |
Re: Hex <--> Binär- / Dualzahl ???
Hallo Qnkel,
die folgenden Routinen erwarten/liefern den Hex-Wert in einem Byte und die Dualzahl in einem String:
Delphi-Quellcode:
Aufruf z.B. mit:
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;
Delphi-Quellcode:
Gruß Hawkeye
s := ByteToDual($03);
b := DualToByte('00010011'); |
Re: Hex <--> Binär- / Dualzahl ???
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* |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz