D2009 char数组的问题 - 如何"优雅地"修复我的代码?

Pet*_*háč 2 arrays delphi byte char delphi-2009

通过我的一些旧的Delphi项目并将它们升级到D2009,因为我发现这个版本对所有以前的版本都是一个很大的改进(Generics.Collections - 哇!;)),我遇到了各种各样的问题.我设法解决了这个问题,但解决方案看起来并不像我认为的那样优雅.(注意,我现在已经有三年没有编写Delphi代码了,甚至当时它还是非常业余的黑客,而不是深入了解正在发生的事情).

我的代码将有一个TFileStream并从中读取.这些文件之前由我的旧Delphi应用程序编写,文件中的前三个字符将是CTR,以将文件类型识别为有效.读者会将前三个字节读入一个字符数组(现在是问题,现在sizeof(char)是2个字节),然后将此数组视为字符串,看它是否为"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;
...
Run Code Online (Sandbox Code Playgroud)

这将编译并用它工作,但现在缓冲区实际上是6个字节长,因此不等于"点击率" 不断.

我通过更改缓冲区来修复此问题,array[0..2] of byte并引入了一些更多的局部变量来执行以下操作:

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

所以基本上我将单个字节转换为字符串然后进行比较,但必须有一种更直接的方法来执行此操作.你能否谈谈这个问题?

Nic*_*ges 13

您可以将缓冲区设置为

var
  buffer: array[0..2] of AnsiChar;
Run Code Online (Sandbox Code Playgroud)

你会读到和以前完全一样的东西.

  • 恕我直言,<code>数组[0..2]的字节</ code>更好地匹配意图. (2认同)