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)
你会读到和以前完全一样的东西.