![](styles/elise/misc/quote_24x24.png)
Zitat von
3_of_8:
Jason, warum schreibst du statt $A, $64,... nicht einfach 10, 100,...? Zur Verwirrung?
![Laughing](images/smilies/icon_lol.gif)
Nein, weil ich das array eigentlich mal in den Code-Block schieben wollte, damit ich nicht auf ein Sprach-abhaengiges array zurueckgreifen haette muessen. Hat aber nicht zu ganz geklappt, und hab aus Gewohnheit die Hex-Werte kopiert... Wenn ich Leute Verwirren will, sieht das anders aus
![Wink](images/smilies/icon_wink.gif)
Na ja, das mit dem Array hatte dann auch zur folge, dass dann das geschriebene nichmehr kompiliert... warum auch immer Delphi was dagegen hat, nen Zeiger in ein 32-Bit-Register zu schreiben
Egal, es geht auch ohne assembler:
Delphi-Quellcode:
function DecIntLength(x: integer): byte;
const
m: packed array[0..9] of integer = (10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 0);
var
i: byte;
begin
result := 0;
i := 0;
if (x < 0) then
begin
inc(result);
x := -x;
end;
repeat
inc(i);
until ((m[i] = 0) or (m[i] > x))
inc(result, i);
end;
![](styles/elise/misc/quote_24x24.png)
Zitat von
xZise:
Und das ganze jetzt für den Int64
![Very Happy](images/smilies/icon_biggrin.gif)
Einfach alle integers durch int64 ersetzen, und folgendes fuer m nehmen:
m: packed array[0..17] of integer = (10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000, 1000000000000000, 10000000000000000, 100000000000000000, 0);
Wie gesagt:
nicht probiert...
greetz
Mike