![]() |
Int zu Hex wandeln
Hallo Leute,
ich habe da ein kleines Problem und ich stehe ein bischen auf'm Schlau. Ich habe einen Integerwert (z.B. 1000) und benötige ihn in HEX also "0003E8". Das kann man ja mit IntToHex prima machen. Das ist aber nicht ganz das was ich benötige. Ich benötige nämlich str = Char($00)+Char($03)+Char($E8). Gibt es ein einfache Möglichkeit das ganze zu bewerkstelligen? Gruß Matthias PS: Delphi 5 habe ich |
Re: Int zu Hex wandeln
du brauchst es dann gar nicht zu konvertieren, sondern einfach den binären aufbau eines Integers nutzen ;)
also sowas:
Delphi-Quellcode:
Ich bin mir nicht sicher, obs das 'and $FF' überhaupt braucht, und ich gebe auch keine Garantie, dass das Funktioniert, aber es dürfte in die Richtung von dem gehn, was du brauchst ;)
function ToStr(Zahl: integer): string;
begin result := char((Zahl shr 16) and $FF) + char((Zahl shr 8) and $FF) + char(Zahl and $FF); end; |
Re: Int zu Hex wandeln
Oder man benutzt gleich
![]()
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; begin Label1.Caption := ''; for i := 1 to Length(Edit1.Text) do begin try Label1.Caption := Label1.Caption + IntToHex(Edit1.Text[i],2) + ' '; except Beep; end; end; end; |
Re: Int zu Hex wandeln
Hallo Matthias,
da muß ich auch mal Fragen wofür du das brauchst? Du kannst dir das einfach über einen varianten Recordteil holen. Also so:
Delphi-Quellcode:
Allerdings muß du auf die little und big Endians aufpassen. Die 1000 steht quasi verkehrt rum im Speicher. Also als E8030000.
type
TIntChar = record case integer of 0 : ( WholeNumber : Int ); 1 : (SingleBytes : array[0..3] of char); end; var IntChar : TIntChar; c : char; begin IntChar.Wholenumber := 1000; c := IntChar.SingleBytes[0]; |
Re: Int zu Hex wandeln
|
Re: Int zu Hex wandeln
Ich schätze mal, es ist nich verboten, in anderen Foren die selbe Frage zu posten
Vielleicht bekommt er da ne andere, besser oder sonstwie vorzuziehende Lösung, die er uns hier dann vorstellen kann ;) |
Re: Int zu Hex wandeln
wow das geht aber fix hier mit den antworten!
@UweR Kurz gesagt: Ich habe hier ein Gerät welches in HEX kommuniziert und ich muss es mit einer DeviceID ansprechen. Könntest du den Source noch ein bischen erklären? Ich verstehe das mit dem "case integer of" nicht ganz, wieso funktioniert das? Wie kommt man auf sowas? Kennt ihr zufällig ein gutes Tutorial welches auch solche Kniffe beinhaltet? @Chimaira und Kroko1999 also vorstellen brauch ich das je jetzt nicht mehr ihr habt ja jetzt den Link. Danke dir Kroko1999. :) mit Dank und Gruß matthias |
Re: Int zu Hex wandeln
Hi.
@Luckie: Wenn er den Hex-Wert $60708090 hat, will er den String '<FPZ' (#$60#$70#$80#$90)... IntToHex($60708090) gibt aber '60708090' zurück... ;-) So gehts auch (ein ähnlich schmutziger Trick wie bei UweR... ;-) ):
Delphi-Quellcode:
@Matczek: Das case of integer heißt, dass der Record - abhängig von einem Feld - seinen Aufbau wechselt, seinen Inhalt jedoch nicht.
function ReverseInt(i : integer) : integer; // ungetestet
begin result := ((i and $000000FF) shl 24) or ((i and $0000FF00) shl 8) or ((i and $00FF0000) shr 8) or ((i and $FF000000) shr 24); end; function DasWasMatczekWill(i : integer) : ShortString; var p : Pointer; begin result[0] := #4; p := @result[1]; p^ := ReverseInt(i); end; Aber warum sendest du nicht direkt den Integer? :gruebel: Der String enthält ja noch Zusatzinfos (Länge, Referenzzähler oder #0 am Ende) //edit: Ganz klein und ganz hell... |
Re: Int zu Hex wandeln
Und das hier geht auch noch:
Delphi-Quellcode:
Grüße vom marabu
type
TCharArray = array of char; function Pack(hex: string): TCharArray; begin SetLength(Result, Length(hex) shr 1); HexToBin(@hex[1], @Result[0], Length(Result)); end; |
Re: Int zu Hex wandeln
@Waldteufel:
Zitat:
Das was du da veranstaltest fällt schon eher in die Kategorie "Dirty Trick", vor allem wenn man das Short bei ShortString vergißt und sich über die Ergebnisse wundert. Dann schon lieber sauber zwei Zeiger aufgesetzt! Das kapiert auch jemand dem der Aufbau eines ShortString nicht unbedingt vertraut ist. @Matczek Zitat:
Tja wo hat man sowas her? Bei mir muß ich sagen das sich solche Schweinereien noch aus meiner C-Zeit kenne und einfach in Delphi nach dem Gegenstück gesucht habe. Tut kenn ich keines, das eignet man sich halt im Laufe der Jahre so an wie man's brauch! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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