un transtypage marrant [ Delphi ] - Delphi/Pascal - Programmation
Marsh Posté le 29-05-2003 à 18:34:24
Y a une explication logique :
les chaînes de longueur variable (AnsiString, WideString) sont en fait des PChar encapsulés (gestion automatique de la mémoire, compteur de références, etc.)
Donc quand tu fais PChar(chaine) c'est vraiment un transtypage.
Tandis qu'une chaîne de longueur fixe ne se finit pas par un #0 (la longueur utilisée est stockée dans le premier octet), et donc il faut vraiment une conversion et pas un simple cast.
Marsh Posté le 29-05-2003 à 18:44:34
antp a écrit : Y a une explication logique : |
Par conversion, tu entends une procedure qui va copier dans le PChar caractere par caractere ou bien PChar(string()) va suffire ?
Marsh Posté le 29-05-2003 à 20:06:32
Dans le pire des cas va falloir copier.
Mais le truc que tu proposes passant par une string ça peut aller (enfin, je mettrais AnsiString pour être sûr, vu que string est juste un mot clé désignant le type de chaînes par défaut)
Marsh Posté le 29-05-2003 à 22:14:45
antp a écrit : Dans le pire des cas va falloir copier. |
UTF8String ... Je bosse pas en ANSI moi mossieur
Marsh Posté le 29-05-2003 à 22:53:16
C'est exactement la même chose au niveau du stockage
Puisque l'UTF8 est stocké dans des AnsiString
D'ailleurs UTF8String est défini comme "string"
Marsh Posté le 29-05-2003 à 18:08:03
Je viens de m'apercevoir d'un truc, on peut pas directement transtyper un string[x] en PChar.
si on a
truc: string[12];
machin: PChar;
vous voyez plus propre que
machin := PChar(string(truc));
---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8