Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: Zeitoptimierung bei Stringzusammensetzung

  Alt 13. Nov 2005, 18:22
Delphi-Quellcode:
j := Ord (st[1]); if j>57 then j := j-65 else j:=j-48;
k := Ord (st[2]); if k>57 then k := k-65 else k:=k-48;
Ist Quatsch, statt 65 muss das 55 sein. Damit Kleinbuchstaben berücksichtigt werden (dann ist das zwar kein Hex, aber egal), würde ich mir eine Lookuptabelle basteln:
Delphi-Quellcode:
Var
  HexTable : Array [Char] Of Byte;
Begin
  For c:='Ato 'Fdo HexTable [c] := Ord (c)-Ord('A') + 10;
  For c:='ato 'fdo HexTable [c] := Ord (c)-Ord('a') + 10;
  For c:='0to '9do HexTable [c] := Ord (c)-Ord('0');
  ...
     st2[i] := HexTable(st[1]) shl 4 or HexTable(st[2]);
Zum shiften: linksshiften um X Stellen ist gleichbedeutend mit einer multiplikation um 2^X. Hier werden aus 2 'nibbles' (4 bit) ein 8bit werden zusammengebastelt. Ich schiebe die ersten 4 bits um 4 stellen nach links (shl 4) und packe die zweiten 4 bits in die dann freien 4 bits (or).
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat