Delphi 7与Delphi 2010到Delphi Xe6读取文件冲突

Delphi 7与Delphi 2010到Delphi Xe6读取文件冲突,delphi,Delphi,我得到了这段源代码,但我对这些行感到困惑,为什么在Delphi7中整数的大小是33,而在使用DelphiXe6时,整数的大小是65 我只想从Delphi XE6结果为65到Delphi 7结果值也为65得到相同的整数值 这是密码 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 =

我得到了这段源代码,但我对这些行感到困惑,为什么在Delphi7中整数的大小是33,而在使用DelphiXe6时,整数的大小是65

我只想从Delphi XE6结果为65到Delphi 7结果值也为65得到相同的整数值

这是密码

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}

//IS THE PROBLEM IN THIS FUNCTION?
function HeadBufBytes(InFileName: String) : string;
    Inf : TFileStream;
    Buf : array[0..5] of char;
begin
//codes here....
    Inf.ReadBuffer(Buf, SizeOf(Buf));
//codes here...
end;

//EDITED CODES FOR SIMPLE LOOK

procedure ReadDataFile(strFilename : string; strDestDir : string);
var
firstF:file;
posRead,nRead:Integer;
Buf : array[1..2048] of Char;
strHeadByte:string;
begin
strHeadByte:=HeadBufBytes(strFileName);
AssignFile(firstF, strFileName);
Reset(firstF, 1);
BlockRead(firstF, Buf, SizeOf(Buf), nRead);
posRead:=Pos(strHeadByte, Buf);
    //PROBLEM LINE
    //WHAT IS THE PROBLEM IN THIS CODE
    showmessage(inttostr(posRead));
    //IN DELPHI7 THE RESULT IS 33
    //IN DELPHI 2010 TO XE6 THE RESULT IS 65
    //WHAT IS THE PROBLEM IN THIS CODE
    //PROBLEM LINE
CloseFile(firstF);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ReadDataFile('00001.dat', extractfilepath(application.ExeName));
end;

end.
在Delphi 7代码中,
Char
是8位类型的
AnsiChar
的别名。自Delphi 2009以来,
Char
一直是16位类型的
WideChar
的别名

将声明更改为

Buf: array[1..2048] of AnsiChar;
使代码的行为与以前一样

同样,你也需要改变

Buf: array[0..5] of Char;

预计会遇到更多类似的问题

在Delphi 7代码中,
Char
是8位类型的
AnsiChar
的别名。自Delphi 2009以来,
Char
一直是16位类型的
WideChar
的别名

将声明更改为

Buf: array[1..2048] of AnsiChar;
使代码的行为与以前一样

同样,你也需要改变

Buf: array[0..5] of Char;


可能会遇到更多类似的问题。

也许我们需要在这个主题上找到一个好问题,这样我们就可以结束所有其他类似问题。如果没有,也许我们可以做一个。有什么想法吗?只要把char改成AnsicharPerhaps,我们需要找到一个关于这个主题的好问题,这样我们就可以结束所有其他类似的问题。如果没有,也许我们可以做一个。有什么想法吗?只要把char改成AnsicharI就行了。我从来没有想过要同时改变这两个词,问题已经解决了,谢谢你,像这样的问题总是会出现。“这不是什么复制品吗?”鲁迪,我同意。我们应该提出一个有全面答案的问题,然后把所有像这样的问题都当作一个重复的问题来解决。在我看来,这不是一个重复的问题,因为如果这是一个重复的问题,那么我就不应该问我是否在这里找到了解决方案,我有一个不同的问题模式。@mayzul:只需在页面右上角的搜索框中输入
char-ansichar
。所有的重复,都是因为在Delphi 2009中,
Char
string
现在使用UTF-16而不是代码页ANSI。我从来没有想过要改变这两个,问题解决了,谢谢,这样的问题总是会出现。“这不是什么复制品吗?”鲁迪,我同意。我们应该提出一个有全面答案的问题,然后把所有像这样的问题都当作一个重复的问题来解决。在我看来,这不是一个重复的问题,因为如果这是一个重复的问题,那么我就不应该问我是否在这里找到了解决方案,我有一个不同的问题模式。@mayzul:只需在页面右上角的搜索框中输入
char-ansichar
。所有重复项,都是由于在Delphi 2009中,
Char
string
现在使用UTF-16而不是代码页ANSI。