代码之家  ›  专栏  ›  技术社区  ›  Peter Perháč

d2009 char数组的问题-如何“优雅地”修复代码?

  •  2
  • Peter Perháč  · 技术社区  · 16 年前

    通过我的一些旧Delphi项目,并将它们升级到D2009,因为我发现这个版本有很大的改进(generics.collections-哇!;)对于所有以前的版本,我都遇到了各种各样的问题。这一个我设法解决了,但解决方案似乎没有我认为的一半优雅。(注意,我已经有三年没有编写德尔福代码了,甚至在那之前,它是一个相当业余的黑客行为,而不是深入了解正在发生的事情)。

    我的代码将有一个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;
    ...
    

    这将被编译并用于工作,但现在缓冲区实际上是6字节长,因此不等于“ctr”。 曾经 .

    我通过将缓冲区改为 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'...
    

    所以基本上,我将单个字节转换成一个字符串,然后进行比较,但是必须有一种更直接的方法来完成这项工作。你能解释一下这个问题吗?

    1 回复  |  直到 16 年前
        1
  •  13
  •   Nick Hodges    16 年前

    您可以将缓冲区设置为

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

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

    推荐文章