Convertir des types de variable à la volée
Ce chapitre est réservés aux initiés des langages de programmation.Comme nous l'avons entrevu dans les chapitres précédents, il peut être nécessaire d'effectuer une conversion de type d'une variable. Les fonctions que nous voyons ici sont l'équivalent des Cast en langage C, sauf qu'en Pascal, les conversions ne peuvent se faire qu'au sein d'une même nature (Réel ou entier) de variables.
- Exemples de code
- Tableau de Conversions d'entiers
- Conversions des réels
- Conversions des chaînes de caractère
- Notions vues dans ce cours
Programme
Soit le programme suivant :
Program conversion1;
var
b1, b2 : byte;
l1,l2,l3 : LongInt;
Begin
l1 := 14258;
l2 := 58405;
l3 := l1*l2;
b1 := byte(L3);
writeln('Résultat de ',l1,' par ',l2,' = ',L3);
writeln('Résultat converti en byte de ',l1,' par ',l2,' = ',B1);
writeln('Résultat converti en byte de ',l1,' par ',l2,' = ',L3 MOD 256);
writeln('Résultat converti en caractère de ',l1,' par ',l2,' = ',chr(b1));
writeln('Résultat converti en caractère de ',l1,' par ',l2,' = ',chr(L3));
Readln;
End.
Ce programme permet de voir les effets de conversions d'entiers :
- Les types longInt allant de -2147483648 à 2147483647, la conversion en un type Byte (de 0 à 255) ne permet pas de stocker l'intégralité de la valeur d'un longint
- En comparant l'effet de la fonction Byte() (dans la variable B1) avec l'opération L3 MOD 256, on se rend compte que ce qui est conservé dans Byte est l'octet de poids faible (le plus à droite) de l'entier long.
Concernant L3 MOD 256 : le reste de la division entière d'un entier long par 256 donne la valeur de l'octet de poids faible.
Attention : ceci est le résultat pour processeur Motorola 68k... Il est possible que ça soit différent pour les Intel du fait de l'architecture Little Endian.
De même, si on avait utilisé la fonction word() sur un entier long, on aurait en résultat les 2 octets les plus à droite (poids faible)
Program conversion2;
var
b1, b2 : byte;
l1 : LongInt;
Begin
l1 := 14258;
b1 := byte(L3);
bool1:=false;
bool2:=true;
writeln('Bool 1 = ',bool1,', bool2 = ', bool2);
writeln('Bool 1 en byte = ',byte(bool1),', bool2 en byte = ', byte(bool2));
writeln ('b1 (',b1,') en booléen = ',boolean(b1));
writeln ('L1 (',L1,') en booléen = ',boolean(L1));
writeln ('b2 (',b2,') en booléen = ',boolean(b2));
Readln;
End.
Les résultats de ce programme nous montrent que:
- Les valeurs booléennes true et false sont respectivement converties en valeur 1 et 0.
- A l'instar du langage C, toute valeur entière (quelle que soit le type d'entier) non nulle est considérée commeTrue (après conversion) et la valeur 0 est considérée comme False (après conversion)
- On rappelle que le type Booléen est un type DIFFERENT d'une variable numérique en Pascal!
Tableau des fonctions de conversions entières en Pascal
| Fonction | Effet | |
|---|---|---|
| ord() | Char | Donne le code ASCII de la variable de type char |
| chr() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en caractère l'Octet de poids faible (le plus à droite) de la variable Entière concernée |
| byte() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en type Byte l'Octet de poids faible (le plus à droite) de la variable Entière concernée |
| ShortINt() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en type ShortInt l'Octet de poids faible (le plus à droite) de la variable Entière concernée |
| Integer() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en type Integer la variable Entière concernée : Si cette variable est plus courte, elle est complétée à gauche par des 0. Si elle est plus longue, seuls les 2 octets de poids faibles seront utilisés. |
| Word() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en type Word la variable Entière concernée : Si cette variable est plus courte, elle est complétée à gauche par des 0. Si elle est plus longue, seuls les 2 octets de poids faibles seront utilisés. |
| LongInt() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en type LongInt la variable Entière concernée : Si cette variable est plus courte, elle est complétée à gauche par des 0. |
| Pointer() | Byte, ShortInt, Integer, Word, LongINt, Pointer | Convertit en type Pointer la variable Entière concernée : Si cette variable est plus courte, elle est complétée à gauche par des 0. |
Conversions de réels
Il semblerait qu'en Pascal (Pure Pascal 1.1), il ne soit pas possible de convertir des types réels...Conversion de Chaînes de caractères
A partir de Pure Pascal 1.1 et Turbo Pascal 7, il existe 2 types de chaînes de caractère. Le type classique String et le type PChar qui est le même type que celui du langage C (pointeur sur chaine se terinant par le caractère NULL). 2 nouvelles fonctions (en vérité, des Procedures) ont été ajoutées à l'Unité System (standard) de Pascal pour effectuer les conversions :| Procédure | Effet | |
| PChar | Convertit la chaine CStr de type C (Pchar) en chaîne pasStr de type String. Les caractères en excédant de la chaine C (au delà de 255) sont supprimés. | |
| String | Convertit la chaine pasStr de type String en chaîne CStr de type C (PChar). |
Notions vues dans ce cours
- Conversion d'entiers
- Valeurs boléennes d'entiers
- Conversions de types de chaïnes