C代码
void CreateMac(char *pchMessage)//【pchMessage =0000741000000000131021010001     0000000092010/02/2110:27:4500000001000000000000】
{
char mac[9];
char tmpbuf[1024];
sprintf(tmpbuf, "%-72.72s%-s", pchMessage, pchMessage+80);//
CreateSecret(mac, tmpbuf);//CreateSecret计算MAC算法
memcpy(pchMessage+72, mac, 8);//把MAC添加到指定的位置
}
void CreateSecret(char *pchMac, char *pchFmt, ...)
{
int len, i;
unsigned char buf[9],w[1024];
va_list ap; va_start(ap, pchFmt);
vsprintf((char *)w,pchFmt,ap);
va_end(ap); len = strlen((char *)w);
if(len <= 8)
{
strcat((char *)w, "12345678");
len += 8;
}
strcpy((char *)buf,"abcdefgh");
for(i = 0; i < len; i++)
buf[i%8]+=i*w[i]%97+i;
for(i = 0; i < 8; i++)
{
buf[i] = buf[i] > 0 ? buf[i] : -buf[i];
buf[i]=buf[i]%126+1;
if(buf[i]<33)
buf[i]+=33+i*7;
if(buf[i]=='|')
buf[i]=126-i;
}
buf[8] = 0;
strcpy(pchMac,(char *)buf);
}void CreateSecret(char *pchMac, char *pchFmt, ...)转成delphi7的代码非常感谢.

解决方案 »

  1.   

    代码太多了你有什么不会的呢?CreateSecret(char *pchMac, char *pchFmt, ...)这个是可选参数
    va_start va_end是读取参数
    strcat strcpy strlen是字符串处理函数
    还有些指针,慢慢写。
      

  2.   

    主要是对delphi 的数组操作一块不熟.就怕有什么地方没释放或者怎样,造成系统崩溃...
      

  3.   

    希望对楼主有帮助
    procedure CreateSecret(pchMac:pchar;pchFmt:pchar);
    var len, i:integer;
        buf:array [0..8] of char;
        w:array [0..1023] of char;
        ap:va_list;
    begin
    va_start(ap, pchFmt);
    vsprintf(pchar(@w[0]),pchFmt,ap);
    va_end(ap);len := strlen(pchar(@w[0]));
    if(len <= 8) then
    begin
      strcat(pchar(@w[0]), '12345678');
      len :=len+ 8;
    end;
    StrCopy(pchar(@buf[0]),'abcdefgh');
    for i:=0 to len-1 do
      buf[i mod 8] := buf[i mod 8] + i*w[i] mod 97+i;
    for i:= 0 to 8-1 do
    begin
      if buf[i]>0 then
      begin  end
      else
        buf[i]:= -buf[i];
    buf[i]:=buf[i] mod 126+1;
    if(buf[i]<33) then
      buf[i]:=buf[i]+33+i*7;
    if(buf[i]='|') then
     buf[i]:=126-i;
    end;
    buf[8] := 0;
    strcpy(pchMac,PChar(@buf[0]));
    end;