读书人

琢磨2天想不通Move函数如何用啊求正确

发布时间: 2012-10-26 10:30:59 作者: rapoo

琢磨2天想不通Move函数怎么用啊,求正确用法
function TCommunication.SendDataBuffers(GateIdx: Integer; Gate: pTGateInfo; MsgList: TList): Boolean;
DataA: PChar;
DataB: PChar;
DataC: PChar;
I: Integer;
nDataALen: Integer;
nDataBLen: Integer;
nDataCLen: Integer;

try

I := 0;
DataA := MsgList.Items[I];
while (True) do begin
try
if (I + 1) >= MsgList.Count then Break;
DataB := MsgList.Items[I + 1];
Move(DataA^, nDataALen, SizeOf(Integer));
Move(DataB^, nDataBLen, SizeOf(Integer));

if (nDataALen + nDataBLen) < g_Config.nBlock then begin
MsgList.Delete(I + 1);
GetMem(DataC, nDataALen + SizeOf(Integer) + nDataBLen);
nDataCLen := nDataALen + nDataBLen;
Move(nDataCLen, DataC^, SizeOf(Integer));
Move(DataA[SizeOf(Integer)], PChar(DataC + SizeOf(Integer))^, nDataALen);
Move(DataB[SizeOf(Integer)], PChar(DataC + nDataALen + SizeOf(Integer))^, nDataBLen);
FreeMem(DataA);
FreeMem(DataB);
DataA := DataC;
MsgList.Items[I] := DataA;
end;


说明下这个MsgList它加载的是一个文本文件中的内容(汉字),g_Config.nBlock是Integer类型的它的值是1024
1.Move(DataA^, nDataALen, SizeOf(Integer));从这里我就开始犯迷糊了.
我个人理解是DataA^从这里移动SizeOf(Integer)这么多字节到nDataALen,但是DataA是PChar类型nDataALen是Integer的, 移 过去之后变成什么东西了?搞不懂
2.if (nDataALen + nDataBLen) < g_Config.nBlock then begin这里他们进行比较,nDataALen和nDataBLen肯定是数值了, 怎么知道他们是多大的数
3.Move(nDataCLen, DataC^, SizeOf(Integer));这句也不太明白
4.Move(DataA[SizeOf(Integer)], PChar(DataC + SizeOf(Integer))^, nDataALen);
DataA[SizeOf(Integer)]从这个位置开始移动,这个位置内容是什么?

这段代码求解释,翻译

[解决办法]

探讨
//下面的两句,估计第二个参数处有误——用一个 pchar 去加一个整型
Move(DataA[SizeOf(Integer)], PChar(DataC + SizeOf(Integer))^, nDataALen);
Move(DataB[SizeOf(Integer)], PChar(DataC + nDataALen + SizeOf(Integer))^, nDataBLen);

读书人网 >.NET

热点推荐