内存拷贝出问题 ( 积分: 100 )

  • 主题发起人 主题发起人 gaolin16
  • 开始时间 开始时间
G

gaolin16

Unregistered / Unconfirmed
GUEST, unregistred user!
一段很简单的内存拷贝,总是报错,不知是何原因
请各位大侠指教!

var
i : Word;
tagBuf : array of char; //注意这里是动态数组
begin
setlength(tagBuf,2);
tagBuf[0]:=#0;
tagBuf[1]:=#1;
//copymemory(@i,tagBuf,2);
move(tagBuf[0],i,2);
end;

用copymemory和move 都不行,到底应该怎么写才对?
  tagBuf是char型动态数组,里面包含2字节整数、4字节整数、1字节字符等信息,
我想从中取出相应位数,将其还原。
例如:两个字节的整数1和字符'9','3' 放在tagBuf 里内容为 (#0,#1,#39,#33)
然后我想再还原这些信息
 
一段很简单的内存拷贝,总是报错,不知是何原因
请各位大侠指教!

var
i : Word;
tagBuf : array of char; //注意这里是动态数组
begin
setlength(tagBuf,2);
tagBuf[0]:=#0;
tagBuf[1]:=#1;
//copymemory(@i,tagBuf,2);
move(tagBuf[0],i,2);
end;

用copymemory和move 都不行,到底应该怎么写才对?
  tagBuf是char型动态数组,里面包含2字节整数、4字节整数、1字节字符等信息,
我想从中取出相应位数,将其还原。
例如:两个字节的整数1和字符'9','3' 放在tagBuf 里内容为 (#0,#1,#39,#33)
然后我想再还原这些信息
 
tagBuf[0]:=#1;
tagBuf[1]:=#0;
word类型数据低位在前,高位在后。
 
To:loco
关键问题是不知为何会报错,高低位互换也报错的。大家可以试试看!
 
procedure TForm1.Button1Click(Sender: TObject);
var
i : PWord;
tagBuf : array of char; //注意这里是动态数组
begin
setlength(tagBuf,2);
tagBuf[0]:=#2;
tagBuf[1]:=#1;
//copymemory(@i,tagBuf,2);
GetMem(i, sizeof(Word));
move(tagBuf[0],i^,2);
FreeMem(I, sizeof(Word));
end;
 
楼主你贴出来的代码没有问题啊。
 
//极度 Easy
var
i: Word;
tagBuf : array of Char;
begin
SetLength(tagBuf, SizeOf(i));
tagBuf[0] := #0; //低位
tagBuf[1] := #1; //高位
//动态数组实际上是指针,并且是编译器内置的,要把它的指针属性显式表现出来
Move(Pointer(tagBuf)^, i, SizeOf(i));
ShowMessage(IntToStr(i)); //是 256 就对了
end;
 
非常感谢 vvyang ,很受启发,也感谢chenybin, 谢谢:)
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部