ord ?
upcase ?
pointer byte sur char puis décrémenter de $40 ou $60 sur condition complexe ?
non rien de tout ça, oubliez les trucs alambiqué et peu performant.
les deux méthodes les plus rependues et utilisées prennent au moins 4 à 6 instruction (deux soustraction, une comparaison et un saut conditionnel).
voici la méthode à une seule instruction (version pascal et asm) :
1 2 3 4 5 6 7 8 9 10
|
function asm_OrdAZaz(const C: AnsiChar): byte;
asm
and al, $1F;
end;
function OrdAZaz(const C: AnsiChar): byte; // peu etre Inline pour eviter le call!
begin
result := byte(C) and $1F;
end; |
ce qui donne :
A = a = 1
B = b = 2
C = c = 3
notez qu'il est injustifié d'utiliser la méthode en assembleur puisque la méthode pascal généré par le compilateur sera identique à cette dernière, de plus on pourra utiliser la directive INLINE (D2007+) qui permettra de se passer du CALL sur OrdAZaz
on peu faire pareil pour les chiffre de 0 à 9 :
result := byte(Chiffre) and $0F;
'0' = 0
'1' = 1
'2' = 2
voila et bon code.
Partager