D2009 problèmes avec tableau de caractères - comment puis-je «élégamment» corriger mon code?

StackOverflow https://stackoverflow.com/questions/822229

Question

En parcourant certains de mes anciens projets Delphi et en les mettant à niveau vers D2009, cette version étant pour moi une amélioration importante (Generics.Collections - wow!;)), toutes les versions précédentes me rencontrent divers problèmes. J'ai réussi à résoudre celui-ci, mais la solution ne semble pas aussi élégante que je le pensais. (Remarque: je n’ai pas écrit de code Delphi depuis environ trois ans et même à l’époque, c’était plutôt du piratage amateur que de la compréhension en profondeur de ce qui se passait.)

Mon code aurait un TFileStream et serait lu. Les anciens fichiers avaient été écrits auparavant par mon ancienne application Delphi de manière à ce que les trois premiers caractères du fichier soient CTR afin de reconnaître le type de fichier comme étant valide. Le lecteur lirait les trois premiers octets dans un tableau de caractères (et voici le problème, maintenant que sizeof (caractère) est de 2 octets), puis traite ce tableau comme une chaîne pour voir s'il lit 'CTR'.

var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...

Ceci va compiler et cela fonctionnait auparavant, mais le tampon a pratiquement 6 octets de long et n’est donc pas égal à 'CTR' ever .

J'ai corrigé cela en modifiant le tampon en tableau [0..2] d'octet et j'ai introduit quelques variables locales supplémentaires pour effectuer les opérations suivantes:

for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...

Donc, en gros, je convertis les octets individuels en chaîne, puis je fais la comparaison, mais il doit y avoir un moyen plus simple de le faire. Pouvez-vous s'il vous plaît nous éclairer un peu sur cette question?

Était-ce utile?

La solution

Vous pouvez définir votre tampon sur

var
  buffer: array[0..2] of AnsiChar;

et vous lirez exactement la même chose qu'avant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top