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) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
result := byte(Chiffre) and $0F;
'0' = 0
'1' = 1
'2' = 2


voila et bon code.