关于向一个指针(IL:^Longint)中读数据后的存放位置问题。(50分)

  • 主题发起人 主题发起人 cjsam
  • 开始时间 开始时间
C

cjsam

Unregistered / Unconfirmed
GUEST, unregistred user!
一个BIN文件。内容:0x12,0x34,0x56,0x78,0x90,0x12,0x34,0x56,0x78,0x90,0x12,0x34
定义:
a:Tmemorystream;
IL:^Longint;
实现:
a:=TMemorystream.create;
a.LoadFromFile('c:/temp.bin');
a.Position:=0;
l:=a.size;
GetMem(IL, 4);

for i:=0 to l-1 do
begin
a.Seek(i*4,sofrombeginning);
try
a.Read(IL^,4);
except
end;
end;

/*********************
这里顺序读取文件temp.bin内容中的依次的前4个字节,读到IL指针中。
假设读的前4个字节,在IL^中的存放的位置理论上应该是:“12345678”
实际上是:“78563412”这和编译器有关系吗??我想要存放为:“12345678”
应该怎样做呢?谢谢。
*********************/
 
longint在内存中是高位在前,低位在后,如果你需要这样,只有自己交换
function Swap(X);
 
longint 不能用Swap, 看以下注释:

function Swap(X);

Description

In Delphi code, Swap exchanges the high-order bytes with the low-order bytes of the argument. X is an expression of type SmallInt, as a 16-bit value, or Word. This is provided for backward compatibility only.

楼主可以把IL的定义修改以下,如下:
IL: PByte; 或者 PChar;
 
自己转换一下就可以了,
 
那就这样读,
a:Tmemorystream;
IL:array[0..3] of byte;
实现:
a:=TMemorystream.create;
a.LoadFromFile('c:/temp.bin');
a.Position:=0;
l:=a.size;
GetMem(IL, 4);

for i:=0 to l-1 do
begin
a.Seek(i*4,sofrombeginning);
try
a.Read(IL,4);
except
end;
end;
 
后退
顶部