D2009 problemas con la matriz de caracteres: ¿cómo puedo `` arreglar mi código con elegancia '?

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

Pregunta

Pasando por algunos de mis proyectos Delphi más antiguos y actualizándolos a D2009, ya que encuentro que esta versión es una gran mejora (Generics.Collections - wow!;)) a todas las versiones anteriores, tengo varios problemas. Este lo logré, pero la solución no parece tan elegante como creo que podría ser. (Tenga en cuenta que no he escrito el código Delphi desde hace unos tres años, e incluso en ese entonces era un hacking más bien aficionado que una comprensión profunda de lo que está pasando).

Mi código tendría un TFileStream y leería. Los archivos fueron escritos anteriormente por mi aplicación Delphi anterior de manera que los tres primeros caracteres del archivo serían CTR para reconocer el tipo de archivo como válido. El lector leería los primeros tres bytes en una matriz de caracteres (y aquí está el problema, ahora que sizeof (char) es de 2 bytes) y luego tratará esta matriz como una cadena para ver si se lee '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;
...

Esto se compilará y solía funcionar, pero ahora el búfer tiene prácticamente 6 bytes de largo y, por lo tanto, no es igual a 'CTR' nunca .

Lo arreglé cambiando el búfer a array [0..2] of byte y presenté algunas variables locales más para hacer lo siguiente:

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

Básicamente, convierto los bytes individuales en una cadena y luego hago la comparación, pero debe haber una forma más directa de hacerlo. ¿Podría por favor arrojar algo de luz sobre este tema?

¿Fue útil?

Solución

Puedes configurar tu búfer en

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

y leerás exactamente lo mismo que antes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top