Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#14

AW: Beste IsHEX( AChar : Char ) Methode um Character auf HEX zu prüfen ?

  Alt 25. Jul 2020, 02:54
Delphi-Quellcode:
function IsHEX(const AChar: Char): Boolean;
{$OVERFLOWCHECKS OFF}
{$B+}
var
  w1, w2: Word;
begin
  w1 := Ord(AChar) - 48; // '0' = 48
  w2 := Word(AChar) and -33; // kleiner Trick um aus kleinen Buchstaben große zu machen
  w2 := w2 - 65; // 'A' = 65
  Result := (w2 <= 5) or (w1 <= 9); // wenn zwischen 'A'..'F' oder '0'..'9'
end;
Branchloses asm:
Code:
Project26.dpr.16: w1 := Ord(AChar) - 48;
004F5874 8BD0             mov edx,eax
004F5876 6683EA30         sub dx,$30
Project26.dpr.17: w2 := w2 and -33;
004F587A 6625DFFF        and ax,$ffdf
Project26.dpr.18: w2 := w2 - 65;
004F587E 6683E841         sub ax,$41
Project26.dpr.19: Result := (w2 <= 5) or (w1 <= 9);
004F5882 6683F805         cmp ax,$05
004F5886 0F96C0           setbe al
004F5889 6683FA09         cmp dx,$09
004F588D 0F96C2           setbe dl
004F5890 0AC2             or al,dl
Project26.dpr.20: end;
004F5892 C3               ret
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (25. Jul 2020 um 03:22 Uhr)
  Mit Zitat antworten Zitat