在DELPHI中如何将16进制数转换成BCD码,请赐教!!!!求一示例!!

解决方案 »

  1.   

    bcd还是内嵌汇编比较简单
      

  2.   

    先将十六进制转换成十进制,然后再将十进制转换成BCD码
    十进制转换成BCD码很简单,举例说明十进制:123
    BCD码 0001 0010  0011就是将十进制单个转换成4位二进制就ok了
      

  3.   

    有例子码?
    function   ToBCD(x:integer):string;
      var   
          sBCD:string;         //压缩BCD
          i :Integer;   
      begin   
          Result   :=   '';   
          if   x<0   then   
              exit;   
        
          Result   :=   IntToStr(x);     //转换成非压缩BCD码   
            
          sBCD :=   '';
          for   i:=1 to (Length(Result) div 2) do
                sBCD := sBCD + Chr((StrToInt(Result[i*2-1]) shl 4)+StrToInt(Result[i*2]));      Result   :=   sBCD;
      end;好像不行???
      

  4.   

    uses IdGlobal
    十进制转换成BCD码函数
    function TForm1.inttobcd(x: Integer): string;
    var
      s,s1:string;
      i,j,x1:Integer;
    begin
      s:=IntToStr(x);
      i:=Length(s);
      result:='';
      for j:=1 to i do
      begin
        x1:=StrToInt(s[j]);
        s1:=inttobin(x1);
        s1:=Copy(s1,Length(s1)-3,4);
        result:=result+s1;
      end;
    end;
      

  5.   

    inttobin貌视不是Delphi的标准函数.
      

  6.   

    调用inttobin函数时,必须引用单元IdGlobal,这个已经写明了
      

  7.   

    这个单元位置在
    D:\Program Files\Borland\Delphi6\Source\Indy 当然这是我机子上的路径,你需要从你的delphi安装路径里找这是函数代码
    function IntToBin(Value: cardinal): string;
    var
      i: Integer;
    begin
      SetLength(result, 32);
      for i := 1 to 32 do
      begin
        if ((Value shl (i - 1)) shr 31) = 0 then
          result[i] := '0' {do not localize}
        else
          result[i] := '1'; {do not localize}
      end;
    end;
      

  8.   

    /********** HEX转BCD******/
    /***hex_data(<0xff,>0)****/
    unsigned int HEX2BCD(unsigned char hex_data)
    {
    unsigned int bcd_data;
    unsigned char temp;
    temp=hex_data%100;
    bcd_data=((unsigned int)hex_data)/100<<8;
    bcd_data=bcd_data|temp/10<<4;|
    bcd_data=bcd_data|temp%10;
    return bcd_data;
    }
    如何用delphi实现上面的 函数????ji
      

  9.   

    unsigned int HEX2BCD(unsigned char hex_data) 

    unsigned int bcd_data; 
    unsigned char temp; 
    temp=hex_data%100;//取余数 delphi写法:temp=hex_data mod 100;  
    bcd_data=((unsigned int)hex_data)/100 < <8;//整除后左移8位 delphi写法:(hex_data div 100) shl 8 
    bcd_data=bcd_data|temp/10 < <4;//整除10后左移4位,然后或 delphi写法:bcd_data or ((temp div 10) shl 4) 
    bcd_data=bcd_data|temp%10;//取余数后或 delphi写法: bcd_data or (temp mod 10) 
    return bcd_data; 

    没试过,应该差不多
      

  10.   

    按照那段代码转过来的函数,我试过了而且测试过了
    不过这个函数只能将一个字节的16进制数转换成可视的BCD码
    function TForm1.hextobcd(s: byte): Integer;
    var
      bcd_data,i,j:Integer;
      temp:string;
    begin
      i:=Ord(s);
      j:=i mod 100;
      temp:=inttohex(j,2);
      bcd_data:=(i div 100) shl 8;
      bcd_data:=bcd_data or ((StrToInt('$'+temp) div 10) shl 4);
      bcd_data:=bcd_data or (StrToInt('$'+temp) mod 10);
      result:=bcd_data;
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
      i:Integer;
      s1,s2:string;
    begin
       //s1:=self.Edit1.Text;
       //i:=StrToInt(s1);
       i:=self.hextobcd($EB);
       self.Edit2.Text:=IntToStr(i);
    end;
      

  11.   

    function BcdToByte(vData:integer):integer; //变小
    var
      Str:String;
    begin
      Str := IntToHex(vData,8);
      try
        Result := StrToInt(Str);
      except
        Result := vData;
      end;
    end;
    Function ByteToBcd(vData:integer):integer; //变大
    var
      Str:String;
    begin
      Str := IntToStr(vData);
      try
        Result := StrToInt('$'+Str);
      except
        Result := vData;
      end;
    end;