Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Typenumwandlungen (https://www.delphipraxis.net/116167-typenumwandlungen.html)

RavenIV 24. Jun 2008 16:10

Re: Typenumwandlungen
 
Aus der Deplhi-Hilfe zu StrToInt:
Zitat:

...
...
Beschreibung
StrToInt konvertiert den in S angegebenen String in einen Integer-Wert. S muss die Entsprechung eines ganzzahligen Wertes (dezimal oder hexadezimal) sein. Enhält er keinen gültigen Wert, wird eine EConvertError-Exception ausgelöst.

endeffects 24. Jun 2008 16:13

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:

The master servers each respond by sending FF FF FF FF 73 0A followed by a (relatively) unique 4-byte "challenge" number.
aus dem string den mir der server sendet extrahiere ich also die letzten 4 zeichen.
weiter gehts dann mit:

Zitat:

The challenge number, 1339895702 (0x4FDD2F96) in this example, is the reverse of the challenge number originally sent by the server (96 2F DD 4F).
das heißt also das ich den string den ich erhalten habe umdrehen muss:

Delphi-Quellcode:
CallengeCode:= CallengeCode[4] + CallengeCode[3] + CallengeCode[2] + CallengeCode[1];
soweit eigentlich ganz simpel, nun habe ich aber das problem aus diesem 4 zeichen
langen string diese komische challenge nummer zu formen

Phoenix 24. Jun 2008 16:22

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.

endeffects 24. Jun 2008 16:24

Re: Typenumwandlungen
 
der server möchte aber diese challange nummer als string haben,
es reicht leider nicht einfach die bytes umzudrehen und zurückzusenden

Cyf 24. Jun 2008 16:25

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:
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;
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)

Phoenix 24. Jun 2008 16:29

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 )

endeffects 24. Jun 2008 16:36

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

endeffects 24. Jun 2008 17:02

Re: Typenumwandlungen
 
so nun hab ich es doch tatsächlich noch hinbekommen:

Delphi-Quellcode:
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)));
vielen vielen lieben dank für eure hilfe und geduld =)
:hello: :hello: :hello: :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
Seite 2 von 2     12   

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