![]() |
Typenumwandlungen
Hallo,
ich hab ein Problem mit der Umwandlung von Typen. Und zwar möchte ich den Wert 0x4FDD2F96 umwandeln in 1339895702. D.h. irgendwie muss ich den Hexwert in einen String umwandeln und dann aus jedem Zeichen des Strings einen Integerwert bilden. Ich hab es schon wie folgt probiert:
Delphi-Quellcode:
Aber dann erhalte ich den Wert 79 und nicht 13 oder 133 ?!
showmessage(IntToStr(Ord((Chr(StrToInt('$4F'))))));
Welche Umwandlung hier von nöten ist ist mir ehrlich gesagt völlig schleierhaft. Hat Jemand vielleicht einen Rat? Mfg |
Re: Typenumwandlungen
Delphi-Quellcode:
:o)
LongInt($4FDD2F96)
|
Re: Typenumwandlungen
Ist das was für Dich?
![]() Ps: Das war ganz einfach gesucht nach ![]() |
Re: Typenumwandlungen
Lustigerweise gibt es ein IntToHex in Delphi, aber kein HexToInt.
Das hab ich mal selber geschrieben (ist aber auch trivial):
Delphi-Quellcode:
Edit: Dank rotem Kasten eigentlich fast überflüssig...
function HexToInt(HexNum: string): LongInt;
begin if HexNum = '' then Result := 0 else begin if Pos('$', HexNum) < 1 then Result := StrToInt('$' + HexNum) else Result := StrToInt(HexNum); end; end; Sherlock |
Re: Typenumwandlungen
oh vielen dank für die zahlreichen und schnellen antworten.
die methode mit dem longint() funktioniert wunderbar solange ich den hex wert eingebe, aber wie löse ich das wenn ich anstelle des hex wertes einen normalen string habe? |
Re: Typenumwandlungen
Häh?
Genau das steht doch in dem von mir verlinkten Beitrag und der letzten Antwort von Sherlock drin?? |
Re: Typenumwandlungen
nein ich meine wenn ich keinen hex wert habe sondern lediglich einen string:
Delphi-Quellcode:
Wie bekomm ich denn jetzt aus dem string s den wert 1339895702 errechnet?
var s: String;
begin showmessage(IntToStr(LongInt($4FDD2F96))); //>> 1339895702 s:= Chr(StrToInt('$4F')) + Chr(StrToInt('$DD')) + Chr(StrToInt('$2F')) + Chr(StrToInt('$96')); showmessage(s); |
Re: Typenumwandlungen
Zitat:
Naja, genau steht's ja nun nicht drin, da er von einer C-Hexzahl mit 0x... ausgeht und da fährt die HexToInt-Funktion gegen diw Wand. Aber die Richtung sollte klar sein. Gruß Gammatester |
Re: Typenumwandlungen
Delphi-Quellcode:
:thumb:
StrToInt('$4FDD2F96');
Oder was meinst du? :gruebel: [Edit] Zitat:
|
Re: Typenumwandlungen
Zitat:
Gammatester |
Re: Typenumwandlungen
Aus der Deplhi-Hilfe zu StrToInt:
Zitat:
|
Re: Typenumwandlungen
ja entschuldigung, vielleicht drück ich mich auch etwas schwerfällig aus :D
also ich möcht eine antwort von einem udp server auswerten und reagieren, in der dokumentation heißt es wie folgt: Zitat:
weiter gehts dann mit: Zitat:
Delphi-Quellcode:
soweit eigentlich ganz simpel, nun habe ich aber das problem aus diesem 4 zeichen
CallengeCode:= CallengeCode[4] + CallengeCode[3] + CallengeCode[2] + CallengeCode[1];
langen string diese komische challenge nummer zu formen |
Re: Typenumwandlungen
Ouch.. du hast eigentlich keinen String, sondern ein Array of Byte, das ist Dein eigentliches Problem (und dürfte Dir zudem massiv Probleme bereiten, sobald Delphi 2008 mit Unicode daherkommt).
Und wenn Du die letzten vier Bytes umgedreht hast, dann hast Du schon genau die Werte, die Du zurücksenden musst. Da brauchst Du nichts mehr konvertieren. |
Re: Typenumwandlungen
der server möchte aber diese challange nummer als string haben,
es reicht leider nicht einfach die bytes umzudrehen und zurückzusenden |
Re: Typenumwandlungen
Dein String muss 9 (8 + '$' bzw, bei '0x' 10) Zeichen lang sein, da es in deinem Beispiel um eine 4-Byte Zahl geht und ein Hexadezimalzeichen 4 Bit (0,5 Byte) repräsentiert, in deinem Beispiel sind es auch 8 Hexadezimalzeichen.
[Edit] Wenn ich das richtig verstehe:
Delphi-Quellcode:
Das ganze ausgehend davon das s[0], das erste Zeichen ist bin bei string grad nicht mehr sicher, ob das nicht doch bei s[1] anfängt, dann einfach überall beim Index eins drauf. (ach es leben wunderschöne #0-terminierte char-arrays)
function foobar(s: string): Integer;
begin Result:= StrToInt('$' + s[8] + s[9] + s[6] + s[7] + s[4] + s[5] + s[2] + s[3]); end; |
Re: Typenumwandlungen
In dem Fall ist wohl IntToHex(byte1, 2) + IntToHex(byte2, 2) + IntToHex(byte3, 2) + IntToHex(byte4, 2) das richtige.
Oder, Du packst die Werte zuvor in einen einzigen Wert - also gleich beim auseinanderpflücken, IntToHex(byte1 + byte2*256 + byte3*65536 + byte4*16777216, 8 ) |
Re: Typenumwandlungen
nun hab ich leider irgendwie den anschluss verloren,
ich hatte ja gehofft das es recht einfach möglich ist diesen 4 byte string so umzuwandeln das ich über StrToInt($...) irgendwie an diesen wert komme |
Re: Typenumwandlungen
so nun hab ich es doch tatsächlich noch hinbekommen:
Delphi-Quellcode:
vielen vielen lieben dank für eure hilfe und geduld =)
function StringtoHex(Data: string): string;
var i, i2: Integer; s: string; begin i2 := 1; for i := 1 to Length(Data) do begin Inc(i2); if i2 = 2 then begin i2 := 1; end; s := s + IntToHex(Ord(Data[i]), 2); end; Result := '$' + s; end; CallengeCode:= CallengeCode[4] + CallengeCode[3] + CallengeCode[2] + CallengeCode[1]; CallengeCode:= StringtoHex(CallengeCode); CallengeCode:= IntToStr(LongInt(StrToInt(CallengeCode))); :hello: :hello: :hello: :hello: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz