ptemp = &btemp;是哪定义的?
UpdateData()哪的函数?

解决方案 »

  1.   

    //我也没有测试
    //斑竹大人为何不给个输入输出范例
    function packToBCD(strSrc: PChar; len: Integer; strBCD: PByte): PByte;
    //BYTE *packToBCD(char *strSrc, int len, BYTE *strBCD)
    var
      I: Integer;//int   i;
      pSrc: PChar;//char *pSrc;
      pStr: PByte;//BYTE *pStr;
    begin
      pSrc := strSrc;//pSrc = strSrc;
      pStr := strBCD;//pStr = strBCD;  while I < len do begin//for (i=0; i<len; i+=2)
        if pSrc^ = #0 then begin//if (*pSrc == '\0')
          Inc(pStr);
          pStr^ := $FF;//*pStr++ = (char)0xFF;
          Inc(I, 2);
          Break;//break;
        end else if ((pSrc + 1)^ = #0) or (I + 1 = len) then begin//else if (*(pSrc+1) == '\0' || i+1 == len)
          Inc(pStr);
          pStr^ := (Ord(pSrc^) and $F) * 16 + $F;//*pStr++ = (*pSrc&0xF)*16 + 0xF;
          Inc(I, 2);
          Break;//break;
        end else begin
          Inc(pStr);
          pStr^ := (Ord(pSrc^) and $F) * 16 + Ord(pSrc^) + 1 and $F;//*pStr++ = (*pSrc&0xF)*16 + (*(pSrc+1)&0xF);
          Inc(pSrc, 2);//pSrc += 2;
        end;
        Inc(I, 2);
      end;
      Result := strBCD;
    end;
      

  2.   

    pStr^ := (Ord(pSrc^) and $F) * 16 + (Ord(pSrc^ + 1) and $F);//*pStr++ = (*pSrc&0xF)*16 + (*(pSrc+1)&0xF);
    //                                  ~~~~~~~~~~~~~~~~~~~~~~~~ 
          
      

  3.   

    不是很熟,可能很多错,呵呵function PackToBCD(Buffer: PChar; Len: Integer; BCD: PChar);
    var
      I: Integer;
      P: PChar;
      C: Char;
    begin
      P := Buffer;
      Result := BCD;
      for I := 0 to Len - 1 step 2 do
      begin
        C := P[I];
        if C = 0 then
        begin
          P[I + 1] := 255;
          break;
        end else
        if (P[I + 1] = 0) and (I + 1 = Len) then
        begin
          P[I + 1] := (Ord(C) and $F) * 16 + $F;
          break;
        end else
        begin
          P[I + 1] := (Ord(C) and $F) * 16 + (Ord(P[I + 1) and $F);
          Inc(P, 2);
        end;
      end;  
    end;procedure Button1OnClick(Sender: TObject);
    var
      S: string;
      I: Integer;
      pTemp: PChar;
      Str: array [0..12] of Char;
    begin
      GetMem(pTemp, 12);
      try
        for I := 0 to 12 do Str[I] := I;
        PackToBCB(@Str[0], 12, pTemp);
        S := '';
        for I := 0 to 12 do
          S := S + Format('%d', [pTemp[I]]);
        //UpdateData();  how do do?
        Edit.Text := S;
      finally
        FreeMem(pTemp);
      end;
    end;