例如:
5E 4D 5E 4D 20 30 5E 4C 20 31 31 38 5E 55 54 20 30 5E 45 4F 48 5E 5E 5E 01 00 76 F7 86 73 79 A1 00 02 FA 7E 67 E8 D6 05 A6 E7 1F 04 2B 00 70 51 40 5E F7 86 73 79 A1 00 03 97 87 D7 E9 16 08 F3 3C 19 03 7C 04 9C 41 40 5E F7 86 73 79 A3 00 02 A5 BE 51 EC 29 00 34 19 80 0B 6D 07 D0 41 40 5E F7 86 73 79 A1 00 00 79 C6 F9 EE ED 06 A9 D8 68 00 68 01 FC 41 40 5E F7 86 73 79 A1 00 03 81 D1 FA EA 5C 08 00 92 E7 0D 2C 05 88 41 40 5E 3C
它包括字母,实数等,该如何转换?

解决方案 »

  1.   

    function HexToInt(HexStr: string): Int64;
    var
      RetVar: Int64;
      i: Byte;
    begin {Hex2Int function}
      HexStr := UpperCase(HexStr);
      if HexStr[length(HexStr)] = 'H' then
        Delete(HexStr, length(HexStr), 1);
      RetVar := 0;
      for i := 1 to length(HexStr) do
      begin
        RetVar := RetVar shl 4;
        if HexStr[i] in ['0'..'9'] then
          RetVar := RetVar + (Byte(HexStr[i]) - 48)
        else if HexStr[i] in ['A'..'F'] then
          RetVar := RetVar + (Byte(HexStr[i]) - 55)
        else
        begin
          Retvar := 0;
          break;
        end;
      end;
      Result := RetVar;
    end;遍历一下即可
      

  2.   

    我不知道你的意思, 在delphi中, 十六进制是用字符串来表示的啊!!
    如果, 你是从串口,或文件读取,或其它接受到的十六进制, 其实,就是十进制数, 那你可用
    IntToHex(X, 2) 来将十进制的树转成你想要的:
    >>转换为含有字母,数字的字符串
      

  3.   

    { =====================================================================
      Function : 解码转换函数===================================================================== }
    function HexDecode(const str: WideString): WideString;
    var
      i, nLen, code: integer;
      sTemp, sSrc, sDes: string;
    begin
      sDes := '';
      sSrc := str;
      nLen := Length(sSrc) div 2;
      for i := 1 to nLen do
      begin
        sTemp := Copy(sSrc, (i * 2) - 1, 2);
        code := StrToInt('$' + sTemp);
        sDes := sDes + Chr(Code);
      end;
      Result := sDes;
    end;
      

  4.   

    看来楼主概念上还是有些模糊。对于这一段16进制字符数据,可以看作是一段字符串,也可以看作是integer(word、byte等等)等数据类型,也可以看作是其它数据类型。关键是要看你怎么去理解。比如5E 4D 5E 4D 20 30 5E 4C 这段来说吧
    1、如果你把它当作是字符串,则这个字符串为
    chr(strtoint('$5E'))+chr(strtoint('$4D'))+chr(strtoint('$5E'))+chr(strtoint('$4D'))+chr(strtoint('$20'))+chr(strtoint('$30'))+chr(strtoint('$5E'))+chr(strtoint('$4C'))
    2、如果你把它当作是integer数据类型,则这段代表两个integer数
    分别为$4D5E4D5E和$4C5E3020,转化就是strtoint('$4D5E4D5E'),strtoint('$4C5E3020')
    同理,你也可把看作是word,int64类型数据。如果为word,就有4个数,如果为int64就只代表一个数。例如你用crossbow提供的function HexToInt(HexStr: string): Int64函数
    则每次输入的HexStr字符串长度必须为8个字节。
      

  5.   

    我是我用在NMUDP控件接收到的一段数据,02对应的编码是STX(传输开始),04对应的是E0T(传输结束,这是否表明介于02至04之间的数据才是我所要的数据。
    我想知道这些字符串到底是什么?
      

  6.   

    To Crossbow:
       用你的方法转变出来的全都是数字,可是这段数据应该包含字符串及实数
    愿闻其详!