p:PInteger;
tmpP:Pinteger;
PCTemp:Pinteger;
p := PInteger(@IrisTemplate);   //1024字节
我想在P的内存空间里在未位增加类似'123456789012345678'的数字字符序列tmpP:=p;   //临时保存首地址
PCTemp := PChar(StringOfChar(#0, 18));StrPCopy(PCTemp, '123456789012345678');
p:=pointer(integer(p) + 1024);
CopyMemory(P^,   PCTemp^,   18)//连接
增加完了之后,我如何在分解开,意思就是把刚才合并的二进制数据在分解成前1024后面是18个字符串。请指教,谢谢各位

解决方案 »

  1.   

    p := PInteger(@IrisTemplate);  //1024字节 这一句指明内存中已经有1024字节的二进制数据
      

  2.   

    var
     p : pchar;
     m : array[0..17] of char;
    begin
      p := PInteger(@IrisTemplate);  //1024字节 
      inc(p, 4); //跳过整数占用的4字节
      CopyMemory(@m[0], p, 18); //m里就是你要的数据了
    end;
      

  3.   

    给你们贴两个函数, 自己下的,一直在用。QQ:33586813
    procedure  MergeStream2(var bSt1: TMemoryStream; bSt2: TMemoryStream);
       var
         Size: Integer;
    begin
       Size := 0;
       bSt1.Seek(0, soFromEnd);
       Size := bSt1.Size + SizeOf(Size);
       bSt1.WriteBuffer(Size, SizeOf(Size));   Size := bSt1.Size;
       bSt1.Position := 0;
       bSt1.Seek(0, soFromEnd);
       bSt1.CopyFrom(bSt2, 0);
       Size:=bSt2.Size + Sizeof(Size);
       bSt1.WriteBuffer(Size, Sizeof(Size));
       bSt1.Position := 0; 
    end;procedure  SplitStream2(var bSt1, bSt2: TMemoryStream);
       var
         Size, SizeX: Integer;
    begin
       bSt2.Size :=0;
       Size:=0;
       bSt1.Seek(-Sizeof(Size), soFromEnd);
       bSt1.ReadBuffer(Size, SizeOf(Size));
       SizeX := Size;
       bSt1.Seek(-Size, soFromEnd);
       bSt2.CopyFrom(bSt1, Size - SizeOf(Size));
       bSt2.Position := 0;   bSt1.Seek(-Sizeof(Size)-SizeX, soFromEnd);
       bSt1.ReadBuffer(Size, SizeOf(Size));
       bSt1.Seek(-Size -SizeX, soFromEnd);
       bSt1.Size := Size - SizeOf(Size);
       bSt1.Position := 0;
    end;