Entwickler-Ecke
Sonstiges (Delphi) - dez-hex funktions bug
sauerkraut - Do 11.11.04 15:22
Titel: dez-hex funktions bug
hier eine funktion die ich zum umwandeln von dez in hex geschrieben hab, aber manchmal schreibt die funktion vor die eigentliche zahl eine 0 ! (so wird aus 255 dez nicht ff sondern 0ff!)
woran kann das liegen?
Delphi-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: 31: 32: 33: 34: 35: 36:
| function deztohex(dez : string) : string; var z : array [0..16] of string; x : string; i,erg : real; begin z[0] := '0'; z[1] := '1'; z[2] := '2'; z[3] := '3'; z[4] := '4'; z[5] := '5'; z[6] := '6'; z[7] := '7'; z[8] := '8'; z[9] := '9'; z[10] := 'a'; z[11] := 'b'; z[12] := 'c'; z[13] := 'd'; z[14] := 'e'; z[15] := 'f'; i := 1; erg := strtoint(dez); while erg>15 do begin erg := floor(erg/15); i:=i+1; end; erg := strtoint(dez); while i>=1 do begin x := x + z[floor(erg / power(16,i-1))]; erg := erg - (floor(erg / (power(16,i-1))) *(power(16,i-1))); i:=i-1; end; result := x; end; |
Moderiert von
Tino: Topic aus VCL (Visual Component Library) verschoben am Do 11.11.2004 um 17:01
raziel - Do 11.11.04 15:32
Nimms mir nicht übel, aber vor lauter floor und Power wird mir ganz schwummig... ;)
Hier mal mein Vorschlag, da Power imho recht langsam is, falls du fragen hast, nur her damit!
Delphi-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: 31: 32: 33: 34: 35:
| function deztohex(dez : string) : string; var z : array [0..16] of char; erg : string; i, j: integer; begin
z[0] := '0'; z[1] := '1'; z[2] := '2'; z[3] := '3'; z[4] := '4'; z[5] := '5'; z[6] := '6'; z[7] := '7'; z[8] := '8'; z[9] := '9'; z[10] := 'a'; z[11] := 'b'; z[12] := 'c'; z[13] := 'd'; z[14] := 'e'; z[15] := 'f';
erg := ''; i := strtointdef(dez, 0); while i > 0 do begin j := i mod 16; i := i div 16; erg := z[j] + erg; end;
result := erg; end; |
so völlig ohne gleitkommas und unnötige math funktionen ;)
sicher noch weiter optimierbar, aber das fiele unter optimierung und assembler.
raziel
sauerkraut - Do 11.11.04 15:41
das ist in der tat kürzer..was heisst den div und mod? und strtointdef?
ok habs nachgesehen...is klar
raziel - Do 11.11.04 15:51
Also:
div: Ganzzahlige Division
z.B.: 5 div 3 ist 1, 13 div 4 ist 3, etc. Also eine ganz normale Division, bloß wird der Nachkommateil abgeschnitten.
mod: Modulo, der Rest von einer Division
z.B. 5 mod 3 ist 2 (5:3=1 Rest 2) 13 mod 4 ist 1 (13:4=3 Rest 1) und 25 mod 5=0 (25:5=5 Rest 0)
StrToIntDef ist im Prinzip das Gleiche wie StrToInt, nur falls der übergebene String kein güliger Integer ist, gibt die Funktion den zweiten Parameter zurück.
raziel
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!