我用MSCOMM接收下位机传上来的BCD码格式的报文,现在想把BCD码转换成10进制或16进制格式,因为作了如下的设置:mscomm1.InputMode:=1;即接收报文方式采用二进制方式接收的,所以我定义了一个变体类型:V: VARTANT,请问各位高手有没有方法将格式转换过来并且显示在MEMO上面,特急,问题解决马上给分,在线等!多谢!!!!!!!!!!!

解决方案 »

  1.   

    下面是一个pChar指针内容,长度length转换成string的。function BCD_to_AnsiString(P_BCD:pChar;length:integer):AnsiString;
    var
            returnstring:Ansistring;
            high_char,low_char,temp:char;
            i:integer;
    begin
            returnstring:='';
            for i:=0 to length-1 do
            begin
                    temp:=P_BCD[i];
                    high_char:=Char((Ord(temp) and $f0) shr 4);
                    low_char:=Char((Ord(temp) and $0f));
                    if (high_char>=#0) and (high_char<=#$9) then
                            high_char:=Char(Ord(high_char)+$30);
                    if (high_char>=#$A) and (high_char<=#$F) then
                            high_char:=Char(Ord(high_char)+$37);                if (low_char>=#0) and (low_char<=#$9) then
                            low_char:=Char(Ord(low_char)+$30);
                    if (low_char>=#$A) and (low_char<=#$F) then
                            low_char:=Char(Ord(low_char)+$37);
                    returnstring:=returnstring+AnsiString(high_char);
                    returnstring:=returnstring+AnsiString(low_char);
            end;
            result:=returnstring;
    end;
      

  2.   

    一个字符一个字符转化不就行了
    b= chr((ord(a) div 16)*10+ (ord(a) mod 10))
      

  3.   

    MSCOMM??楼主 不用管什么BCD码什么的  MSCOMM只有两中接受模式 一个是文本行 一个是BYTE型 你可以把接收到的保存到一个数组(BYTE)中 (2)或者 
     Orec:olevariant;
     vrec:variant;
     strrec :string;
    begin orec:=mscomm1.Input;
      vrec:=orec;
      strrec:=vrec;这是转化为字符串