[ Delphi ] un transtypage marrant

un transtypage marrant [ Delphi ] - Delphi/Pascal - Programmation

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
Reply

Marsh Posté le 29-05-2003 à 18:08:03   

Reply

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.


Message édité par antp le 29-05-2003 à 18:34:40

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-05-2003 à 18:44:34    

antp a écrit :

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.


 
 
Par conversion, tu entends une procedure qui va copier dans le PChar caractere par caractere ou bien PChar(string()) va suffire ?


---------------
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
Reply

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)


Message édité par antp le 29-05-2003 à 20:06:44

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 29-05-2003 à 22:14:45    

antp a écrit :

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)


 
UTF8String ... Je bosse pas en ANSI moi mossieur  :o


---------------
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
Reply

Marsh Posté le 29-05-2003 à 22:53:16    

C'est exactement la même chose au niveau du stockage :D
Puisque l'UTF8 est stocké dans des AnsiString :whistle:  
D'ailleurs UTF8String est défini comme "string"


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed