要做串口通信的程序,请问如何将带中英文和数字的文本转换为16进制格式啊?然后再怎么转换回来?谢谢,急!!!

解决方案 »

  1.   

    var buffer:pchar;
    begin
        getmem(buffer,2*sizeof(char));
        bintohex('ab',buffer,2);
        showmessage(buffer);
        freemem(buffer);
    end;
      

  2.   

    这个是汉字转16进制的:
    procedure TForm1.Edit1Change(Sender: TObject);
    var s: string;
        i, j, k: integer;
        a: array[1..1000] of char;
    begin
      s:='';
      for i:=1 to Length(Edit1.Text) do begin
       j:=Integer(Edit1.Text[i]);
       s:=s+Copy(Format('%X ',[j+$100]) ,2,3);
      end;
      Edit2.Text:=s;  StringToWideChar(Edit1.Text, @(a[1]), 500);
      s:=''; i:=1;
      while ((a[i]<>#0) or (a[i+1]<>#0)) do begin
       j:=Integer(a[i]); k:=Integer(a[i+1]);
       s:=s+Copy(Format('%X ',[j*$100+k+$10000]) ,2,5);
       i:=i+2;
      end;
      Edit3.Text:=s;end;
      

  3.   

    to :  jinjazz(三个小时上下班) 
    我试了几次,有点小问题,我的程序如下:
    procedure TCommForm.chkRecClick(Sender: TObject);
    var buffer:pchar;
      str: string;
    begin
      if TCheckBox(Sender).Checked then begin
        getmem(buffer,sizeof(char)*length(memRec.Text));
        bintohex(pchar(memRec.Text),buffer,length(memRec.Text));
        memRec.Text := buffer;
        freemem(buffer);
      end else begin
        str := memRec.Text;
        getmem(buffer,sizeof(char)*length(memRec.text));
        HexToBin(pchar(lowercase(str)),buffer,Length(memRec.Text));
        memRec.Text := buffer;
        freemem(buffer);
      end;
    end;测试数据:'woaini'转一次:'776F61696E69A'
    转还原:'woaini'
    再转一次:'776F61696E69'(后面有个制表符)
    再转还原:'woaini'
    再转一次:'776F61696E69C'
    转还原:'woaini'
    再转:'776F61696E69A'如此循环……
      

  4.   

    to :  juliens(星星球愛思纯^_^) 
    edit3显示的是什么东东啊?和EDIT2差不多,就是每个HEX后面多了几个0、没有了空格。
      

  5.   

    用char(整型)和byte(字符型),具体转十六进制还是你老兄自己写吧,应该不太难的!
      

  6.   

    //由于对于串行口而言,是以字节为单位传送的,所以没必要将汉字和字符分开。
    function StrToHexStr(Str:String):String;
    var
         i:Integer;
    begin
          for i:=1 to Length(Str) do
          begin
               Result:=Result+IntToHex(Ord(Str[i]),2);
          end;
    end;
    function HexStrToStr(Str:String):String;
         function HexToInt(Str:String):Integer;
         var
              l,i,b:Integer;
         begin
              l:=Length(Str);
              Str:=UpperCase(Str);
              for i:=1 to l do
              begin
                   case Str[i] of
                   '0'..'9':b:=Ord(Str[i])-Ord('0');
                   'A'..'F':b:=Ord(Str[i])-Ord('A')+10;
                   end;
                   Result:=Result+b*Round(Power(16,l-i));
              end;
         end;
    var
         i:Integer;
         s:String;
    begin
         i:=1;
          while i<Length(Str) do
          begin
               s:=Str[i]+Str[i+1];
               Result:=Result+Chr(HexToInt(s));
               Inc(i,2);
          end;
    end;
      

  7.   

    ////测试用例:ShowMessage(HexStrToStr(StrToHexStr('使用这个,上个少了一条语句。')));function StrToHexStr(Str:String):String;
    var
         i:Integer;
    begin
          for i:=1 to Length(Str) do
          begin
               Result:=Result+IntToHex(Ord(Str[i]),2);
          end;
    end;
    function HexStrToStr(Str:String):String;
         function HexToInt(Str:String):Integer;
         var
              l,i,b:Integer;
         begin
              Result:=0;
              l:=Length(Str);
              Str:=UpperCase(Str);
              for i:=1 to l do
              begin
                   case Str[i] of
                   '0'..'9':b:=Ord(Str[i])-Ord('0');
                   'A'..'F':b:=Ord(Str[i])-Ord('A')+10;
                   end;
                   Result:=Result+b*Round(Power(16,l-i));
              end;
         end;
    var
         i:Integer;
         s:String;
    begin
         i:=1;
          while i<Length(Str) do
          begin
               s:=Str[i]+Str[i+1];
               Result:=Result+Chr(HexToInt(s));
               Inc(i,2);
          end;
    end;