Bei Letzerem (Array-Input) kann man natürlich die BCD-Berechnungen weglassen und einfach direkt jedes Byte in einen String umwandeln (Format('$%d ', [s[i]]
) und diese aneinanderhängen.
Nee, falsch geguckt ... geht natürlich nicht.
Aber jenachdem wie schnell die BCD-Berechnugen sind, kann man hier auch erstmal je 4 bis 8 der Bytes zu Integer oder Int64 zusammenfassen und dann damit weiterrechnen.
Bei Ersterem (String-Input) ist es eventuell nicht ganz so optimal jede Ziffer (Hexadezimalstelle) einzeln via StrToInt umzuwandeln und einzeln zu verrechnen.
* Da kann man entweder das StrToInt weglassen und das Char direkt umrechnen
Delphi-Quellcode:
case s[i] of
'0'..'9': n := Ord(s[i]) - Ord('0');
'a'..'F': n := Ord(s[i]) - Ord('a') + 10;
'A'..'F': n := Ord(s[i]) - Ord('A') + 10;
end;
* oder man fasst zumindestens mehrere der Hexadezimalstellen zusammen (bis zu 8 oder 16, jenachdem ob man mit Integer oder Int64 weiterrechnen kann),
wobei man sich dann eben auch bis zu 93% der Berechnungsdurchläufe erspart.