Hallo,
bei unseren Routinen (2 + 3) ist tatsächlich ein Fehler drin (die Nibbles waren vertauscht). Hier die richtige Routine:
Delphi-Quellcode:
function HexNumberToDec(AValue: Char): Cardinal;
begin
case AValue of
'0'..'9': Result := Ord(AValue) - 48;
'A'..'F': Result := Ord(AValue) - 55;
'a'..'f': Result := Ord(AValue) - 87;
end;
end;
function HTMLColorToColor(const Color: String): TColor;
begin
Result := HexNumberToDec(Color[3]) + HexNumberToDec(Color[2]) shl 4
+ HexNumberToDec(Color[5]) shl 8 + HexNumberToDec(Color[4]) shl 12
+ HexNumberToDec(Color[7]) shl 16 + HexNumberToDec(Color[6]) shl 20;
end;
Zu Deinem Benchmark:
Bei der Eingabe fehlt das # am Anfang, deshalb gibt's auch verschiedene Ergebnisse (abgesehen von obigem Dreher). Mit shl (und const) ist die Routine tatsächlich ~1% schneller, aber das ist hier wohl völlig egal
.
Gruß
xaromz
[add] Ich hab mir jetzt mal Deinen Benchmark angesehen. Was misst Du da? Jeden einzelnen Aufruf? Normalerweise lässt man sowas 2-3 Millionen mal durchlaufen und misst die Gesamtzeit, um Seiteneffekte auszuschließen. Nur so als Anregung
[/add]