Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehlermeldung bei der Funktion IntToHex


Bomania - Sa 15.02.03 22:02
Titel: Fehlermeldung bei der Funktion IntToHex

Quelltext
1:
IntToHex(strAkt,2)                    


Fehlermeldung: "Es gibt keine überladene Version von 'IntToHex', die man mit diesen Argumenten aufrufen kann"

Was hab ich da falsch gemacht? Die Hilfe hilft mir nicht...

Edit: Bei der Variablen handelt es sich um ein String mit einer Länge von einem Zeichen.


Bomania - Sa 15.02.03 22:08

Ah, diesmal habe ich zu schnell aufgegeben...habe den Fehler gefunden...


Christian S. - Sa 15.02.03 22:08

Ist die gleiche Fehlermeldung wie bei dem Beispiel zu IntToHex, welches sich in meiner Delpi-Hilfe befindet: da ist der erste Parameter ein String, was aber nicht sein darf. Ich nehme an, das ist auch Dein Fehler, oder?


Bomania - Sa 15.02.03 22:18

Genau dieses :idea:


Bomania - So 16.02.03 11:26

Wie aber konvertiert man Hex zu Int?


BungeeBug - So 16.02.03 12:00

Also eine Möglichkeit die mir Google offengelegt hat ist

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
Einen Hex-String in Integer umwandeln

function HexStrToInt(HexStr: String): LongInt; // Hexadezimale Strings werden in Integer verwandelt
var x : Byte; // FOR-Schleife
y : Byte; // Exponenten-Zähler (da letzte Ziffer = 16^0, davor 16^1 ..)
begin
Result := 0;
y := 0;
for x := Length(HexStr) downto 1 do
begin
case StrToIntDef(HexStr[x], 99) of
0..9: Result := Result + Trunc(SqrX(16, y)) * StrToInt(HexStr[x]);
end;
case HexStr[x] of
'A', 'a' : Result := Result + Trunc(SqrX(16, y)) * 10;
'B', 'b' : Result := Result + Trunc(SqrX(16, y)) * 11;
'C', 'c' : Result := Result + Trunc(SqrX(16, y)) * 12;
'D', 'd' : Result := Result + Trunc(SqrX(16, y)) * 13;
'E', 'e' : Result := Result + Trunc(SqrX(16, y)) * 14;
'F', 'f' : Result := Result + Trunc(SqrX(16, y)) * 15;
'0'..'9' : // Dummy-Anweisung, damit 0..9 nicht als unzulässige Zeichen zählen
else
begin // HexStr enthält unzulässiges Zeichen (A..F, 0..9)
Result := -1;
exit;
end; // else
end; // case
Inc(y);
end; // for
end; // Prozedur

der Code ist NICHT getestet!

MfG BungeeBug


Brueggendiek - Mo 17.02.03 04:09

Hallo!

Um einen Hex-String in einen Interger umzuwandeln, kann man ganz einfach StrToInt benutzten. Allerdings darf man nicht vergessen, der Funktion mitzuteilen, dass es sich um einen Hex-String handelt. Dazu wird einfach ein '$' vor den String gesetzt - genauso wie man auch Hex-Zahlen im Source angeben kann!

Quelltext
1:
zahl:=StrToInt('$'+satz);                    

Mit TRY_EXCEPT kann man auch noch ungültige Eingaben abfangen bzw. mit StrToIntDef einen Ersatzwert festlegen.
Alternative: Mit Val arbeiten, da erhält man sogar die Position des ungültigen Zeichens im String!

Gruß

Dietmar Brüggendiek