在C中
int  DecryptionData(char * apInData,unsigned long aiInDataLen, char * apOutData,unsigned long & aiOutDataLen)
{

unsigned char *buf=new unsigned char[aiInDataLen];
if(buf==NULL)return 0;
unsigned long tl;
memcpy(buf,apInData,aiInDataLen);
for(unsigned int ti=0;ti<aiInDataLen/8;ti++)
decipher((unsigned long *)(buf+ti*8), (unsigned long *)(buf+ti*8+4));
aiOutDataLen=*buf*0x01000000+*(buf+1)*0x010000+*(buf+2)*0x100+*(buf+3);
memcpy(apOutData,buf+4,aiOutDataLen);
delete buf;
    return 1;
}Delphi中function TCompress.DecryptionData(apInData: PChar; aiInDataLen: Cardinal;
  apOutData: PChar; aiOutDataLen : PCardinal): integer;
var buf : PChar;
    tl,ti : Cardinal;
begin
  GetMem(buf,aiInDataLen);
if buf <> nil then result := 0;
  CopyMemory(buf,apInData,aiInDataLen);
for ti := 0 to (aiInDataLen div 8 - 1) do
decipher(PCardinal(buf + ti*8), PCardinal(buf + ti*8 + 4));
aiOutDataLen := ((buf^)*$01000000) + (((buf + 1)^) * $010000) + (((buf + 2)^) * $100) + (buf + 3)^;
  CopyMemory(apOutData,buf+4,aiOutDataLen^); FreeMem(buf);
  result := 1;
end;其中aiOutDataLen := ((buf^)*$01000000) + (((buf + 1)^) * $010000) + (((buf + 2)^) * $100) + (buf + 3)^;
编译不过 提示Operator not applicable to this operand type

解决方案 »

  1.   

    function DecryptionData(apInData:pchar;aiInDataLen: dword;apOutData: pchar;aiOutDataLen: PDword): integer;
    var
     tl: integer;
     ti: integer;
     buf: pchar;
    begin GetMem(buf, aiInDataLen * sizeof(char));
      if buf=nil then
      begin
       result := 0;
       exit;
      end;  CopyMemory(buf, apInData, aiInDataLen);
      for ti := 0 to (aiInDataLen div 8) do
    //    decipher(pdword(integer(buf)+ti*8), pdword(integer(buf)+ti*8+4); aiOutDataLen^ := integer(buf^) * $01000000 + Integer(Pointer(integer(buf)+1)^) * $010000 +
        Integer(Pointer(Integer(buf)+2)^) * $100 + Integer(Pointer(integer(buf)+3)^); CopyMemory(apOutData,pointer(integer(buf)+4), aiOutDataLen^);
    FreeMem(buf);
        result := 1;
    end;
      

  2.   

    function DecryptionData(apInData:pchar;aiInDataLen: dword;apOutData: pchar;aiOutDataLen: PDword): integer;
    var
     tl: integer;
     ti: integer;
     buf: pchar;
    begin GetMem(buf, aiInDataLen * sizeof(char));
      if buf=nil then
      begin
       result := 0;
       exit;
      end;  CopyMemory(buf, apInData, aiInDataLen);
      for ti := 0 to (aiInDataLen div 8) do
    //    decipher(pdword(integer(buf)+ti*8), pdword(integer(buf)+ti*8+4); aiOutDataLen^ := integer(buf^) * $01000000 + Integer(Pointer(integer(buf)+1)^) * $010000 +
        Integer(Pointer(Integer(buf)+2)^) * $100 + Integer(Pointer(integer(buf)+3)^); CopyMemory(apOutData,pointer(integer(buf)+4), aiOutDataLen^);
    FreeMem(buf);
        result := 1;
    end;
      

  3.   

    樓上的
     Copy && Paste ??????????????
      

  4.   

    lzgctgc(极度困惑) 能不能解释一下呢?谢谢了!解释完了马上给分!
      

  5.   

    他是copy 我的??你反而問他???