Entwickler-Ecke
Sonstiges (Delphi) - Hex-Konvertierung
Weide - Mo 10.02.03 14:00
Titel: Hex-Konvertierung
Hallo,
Ich möchte in einem TEdit Hex-Zeichen eingeben. Wie können sie in die entsprechenden "richtigen" Hexwerte konvertiert werden?
Gruß Weide
foxy - Mo 10.02.03 14:26
zu was konvertiert werden?? zu dezimal oder zu ascii
Weide - Mo 10.02.03 14:29
Hallo foxy,
sorry, zu ascii
obwohl ... bevor ich jetzt etwas Falsches sage....
ich habe eine kleine terminalkomponente für die serielle Schnittstelle. Dort wird ein ins TEdit eingegebener String gesendet. Ich möchte allerdings bestimmte Hex-Zeichen senden. Nun könnte ich natürlich gucken, welches Zeichen welchem Hex-Wert entspricht, aber das ist wohl zu umständlich. Ich möchte z.B. einfach: "FB FA 30 45" eingeben und er soll genau diese Hex-Zeichen senden.
Gruß Weide
foxy - Mo 10.02.03 14:33
ich würde das ganz simpel machen, da du ja zahlen und buchstaben hast in deiner Hexadezimalzahl, würde ich die zusammenzählen ... ich denke du weist wie das geht oder?? also das der Byte-Wert rauskommt
dann nimmst du für das ergebnis eine variable
z.b.
dann kuckst du einfach in der ascii tabelle nach welcher wert da rein muss ....
dies eben in einer schleife ....
DaRkFiRe - Mo 10.02.03 17:06
Mit StrToInt kann man auch Hex-Strings in Integers umwandeln. Einfach dem String noch das Dollarzeichen ($) voranstellen et voilà.
Quelltext
1: 2: 3: 4:
| var i:INTEGER; begin i:=StrToInt('$'+Edit1.Text); end; |
Weide - Mo 10.02.03 18:15
Hallo DarkFire,
ich muß aber einen String an die Komponente übergeben. Ein Integer nützt mir leider nichts. Zudem denke ich, dass ein in Deiner Weise gewandelter Wert nicht das Richtige ergibt. Ein "FF" würde als Ergebnis "255" zur Folge haben - und das ist es nicht, was ich will.
Nochmal: Ich möchte eine Zeichenkette eingeben (z.B. FA FB A0 07), und genau diese Zeichenkette soll an der seriellen Schnittstelle ausgegeben werden. Die Schnittstellenkomponente benötigt allerdings Strings. Ich muß also meine Zeichenkette so umwandeln, dass ein Zeichen an die Routine übergeben wird, die beispielsweise dem Hex-Wert "FA" entspricht. Das sind dann meist irgendwelche Sonderzeichen oder "Line Feed" oder sonst irgend etwas.
Gibt vielleicht eine Eingabekomponente, die man einfach von String auf Hex umschalten kann? Ich meine, so etwas mal irgendwo in Delphi gesehen zu haben - aber ich find's nicht mehr :-(
Gruß Weide
Wolff68 - Mi 12.02.03 00:30
Na wenn Du den Byte-Wert hast, bekommst doch mit Chr(byte) das Zeichen. Das musst dann nur noch in einer Schleife zum String hinzufügen.
In der Art:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| var i : byte; c : char; h : String[2]; sEin, sAus : String; begin sAus := ''; sEin := Edit1.text; repeat ... hier die Hexzahl in h ablegen ... i := StrToInt('$'+h); c := Chr(i); sAus := sAus + c; until ... keine hexzahlen mehr drin ... end; |
Kannst das ganze natürlich auch zusammenschreiben als
sAus := sAus + Chr(StrToInt('$'+h));
DaRkFiRe - Mi 12.02.03 02:12
Keine einwände *g*
Für alle, die nicht gern selbst coden:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function HexCodesToStr(S:STRING):STRING; var R,T:STRING; var iIDX:INTEGER; begin T:=S; R:=''; repeat iIDX:=Pos(#32,T); IF iIDX > 0 THEN BEGIN R:=R+CHR(STRTOINT('$'+TRIM(COPY(T,1,iIDX-1)))); DELETE(T,1,iIDX); END; until (iIDX = 0); Result:=R; end; |
Achtung - Code nicht auf Funktionalität geprüft - so sollte es auch funzen...
Weide - Mi 12.02.03 09:51
Hallo,
siehste wohl - die funktion "Chr" kannte ich gar nicht - vielen Dank für Eure Hilfe :)
Gruß Weide
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!