首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-10-26 
琢磨2天想不通Move函数怎么用啊,求正确用法function TCommunication.SendDataBuffers(GateIdx: Integer G

琢磨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);

热点排行