Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi HexToInt (https://www.delphipraxis.net/135333-hextoint.html)

mkinzler 9. Jun 2009 08:13

Re: HexToInt
 
In diesem Fall wohl 'F'

Sonst
Delphi-Quellcode:
Wert := Ord('ÿ');

Carsten1234 9. Jun 2009 08:23

Re: HexToInt
 
Alternativ:
Delphi-Quellcode:
var b1: byte;
    b2: byte;
    b3: byte;
    b4: byte;
    Value: integer;
begin
  Value:= b1* 16777216 + b2 * 65536 + b3 * 256 + b4;
end;
Dann kommt für
FF FF FF E2 auch -30 raus. :drunken:

Draos 9. Jun 2009 08:34

Re: HexToInt
 
Das er FF als -1 erkennt brauchste die Anzahl der möglichen Hexadezimalstellen.

Delphi-Quellcode:
 function pow(x,n:Integer):Integer;
 begin
  if n>1 then
   result:=x*pow(x,n-1)
  else result:=x;
 end;

var x   :Integer;
    s   :String;
begin
 s:='FF';

 x:=HexToInt(s);

 if x>pow(16,Length(s)-1) then
  x:=x-pow(16,Length(s));

end;
 //x ist der Integer-Wert
Nachteil: 15 ist nicht F sonder 0F

himitsu 9. Jun 2009 09:35

Re: HexToInt
 
ist das FF FF FF E2 jetzt die Hexdarstelung des Strings, oder sieht der String genau so aus?

Delphi-Quellcode:
S := 'FF FF FF E2';
i := StrToInt(StringReplace('$' + S, ' ', '', [rfReplaceAll]));


S := #$FF#$FF#$FF#$E2;
i := PLongInt(@S[1])^;

Draos 9. Jun 2009 13:39

Re: HexToInt
 
String mit leezeichen?
wie wärs damit?
Delphi-Quellcode:
for i:=1 to Length(S) do
 if S[i]=' ' then
  s[i]:='';

himitsu 9. Jun 2009 14:09

Re: HexToInt
 
Zitat:

Zitat von Draos
String mit leezeichen?
wie wärs damit?

geht nicht, erstmal kann ein Char nicht "leer" sein ... aber Delphi-Referenz durchsuchenDelete würde aushelfen
und dann würde bei dieser Zählrichtung schnell der Index aus dem Bereich rauswandern, da der String schließlich schrumpfen würde :angel2:

Draos 9. Jun 2009 15:25

Re: HexToInt
 
Delphi-Quellcode:
var s    :String;
    i    :Integer;
begin
 s:=edit1.Text;
 repeat
  Delete(s,pos(' ',s),1);
 until pos(' ',s)=0;
 edit2.text:=s;
also sowas eher? Danke so lernt man

himitsu 9. Jun 2009 15:33

Re: HexToInt
 
jupp, würde gehn

oder einfach die Zählrichtung umkehren
Delphi-Quellcode:
for i := Length(S) downto 1 do
  if S[i] = ' ' then
    Delete(S, i, 1);
das Problem bei for i := 1 to Length(S) do ist einfach, daß Length nur bei Schleifenbeginn einmal ausgewertet, das Ergebnis gespeichert und danach nur noch die "Kopie" verwendet wird.
außerdem würden bei 2 folgenden ' ' immer das Zweite übersprungen, da sich ja im nächsten Durchgang der Index erhöht und das 2. ' ' eines vorrutscht.

und im Notfall würde auch Delphi-Referenz durchsuchenStringReplace aushelfen :angel:

Carsten1234 10. Jun 2009 05:54

Re: HexToInt
 
Hallo zusammen,

zur Info: die von mir genannten Werte kommt als HEX im Format HiWord/LoWord rein. Es ist also kein String in dem Sinne, wo etwaige Leerzeichen gelöscht werden müssten. War jetzt vielleicht von mir etwas blöd ausgedrückt - sorry.

Gruß, Carsten

Carsten1234 10. Jun 2009 06:15

Re: HexToInt
 
Hallo zusammen,

zur Info: Die von mir genannten Werte kommen als HEX im Format HiWord/LoWord rein. Es müssen also keine etwaige Leerzeichen gelöscht werden. Im Trace-Log der von mir verwendeten Komponenten ApdCOMPort (s. AsyncPro) sieht das so aus:
[FF][FF][FF][E2]

Da jedoch die Komponente kein GetByte/GetWord kennt, sondern nur ein GetChar/GetBlock, werden die (Einzel-)Werte vor mir via GetChar abgeholt, um sie dann via Ord in Zahlen zu wandeln bzw. daraus letztendlich wieder den ursprünglichen Wert -30 zu erhalten.
Sollte ich mich da etwas unklar ausgedrückt haben, so tut es mir leid.

Gruß, Carsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Seite 2 von 3     12 3      

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