Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
3.916 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 24. Jul 2020, 15:02
Delphi-Quellcode:
type
  TNormTableByte = packed array[byte] of byte;

var
  /// a conversion table from hexa chars into binary data
  // - returns 255 for any character out of 0..9,A..Z,a..z range
  // - used e.g. by HexToBin() function
  // - is defined globally, since may be used from an inlined function
  ConvertHexToBin: TNormTableByte;

var B,C: PtrUInt;
    tab: {$ifdef CPUX86NOTPIC}TNormTableByte absolute ConvertHexToBin{$else}PNormTableByte{$endif};

FillcharFast(ConvertHexToBin[0],SizeOf(ConvertHexToBin),255); // all to 255
  v := 0;
  for i := ord('0') to ord('9') do begin
    ConvertHexToBin[i] := v;
    inc(v);
  end;
  for i := ord('A') to ord('F') do begin
    ConvertHexToBin[i] := v;
    ConvertHexToBin[i+(ord('a')-ord('A'))] := v;
    inc(v);
  end;


function HexToCharValid(Hex: PAnsiChar): boolean;
begin
  result := (ConvertHexToBin[Ord(Hex[0])]<=15) and
            (ConvertHexToBin[Ord(Hex[1])]<=15);
end;

Der SynCommon verfolgt wohl den Table-Ansatz, der am schnellsten sein sollte, allerdings auf Kosten von 256 Einträgen.
Die ganze SysCommon Unit ist aber extrem verwurschtelt, WYSIWYG ist da nicht unbedingt gegeben.
Nur wegen dem IsHEX würde ich mir das nicht antun, auch wenn es ansonsten hochoptimiert aussieht.
  Mit Zitat antworten Zitat