for example:
'1100'->'c'

解决方案 »

  1.   

    给你一个函数,就可以了//从字符串转换回数:function StrToNum (const s: string; base: Integer;
                       neg: Boolean; max: Integer): Integer;
    // s = 要转换的字符串
    // base = 进制数
    // neg = 是否为负数// max = 要转换的最大数// 
    // 用法:
    // i:= StrToNum (''00101101'', 2, false, MaxInt); 
    // i:= StrToNum (''002D'', 16, false, MaxInt); 
    // i:= StrToNum (''-45'', 10, true, MaxInt); 
    // i:= StrToNum (''ZZ'', 36, true, MaxInt);
    // 
    var negate, done: Boolean; 
        i, ind, len, digit, mmb: Integer;
        c: Char;
        mdb, res: Integer; 
    begin 
    res:= 0;  i:= 1;  digit:= 0; 
    if (base >= MinBase) and (base <= MaxBase) then begin
      mmb:= max mod base; 
      mdb:= max div base; 
      len:= Length (s); 
      negate:= False;
      while (i <= len) and (s[i] = ' ') do Inc (i);
      if neg then begin 
       case s[i] of 
        '+': Inc (i);
        '-': begin  Inc (i);  negate:= TRUE; end;
       end; (* CASE *) 
      end; (* IF neg *) 
      done:= len > i;
      while (i <= len) and done do begin 
       c:= Upcase (s[i]); 
       case c of 
        '0'..'9': digit:= ORD(c) - 48;
        'A'..'Z': digit:= ORD(c) - 55;
        else      done:= FALSE 
       end; (* CASE *) 
       done:= done and (digit < base);
       if done then begin 
        done:= (res < mdb) or ((res = mdb) and (digit <= mmb)); 
        IF done then begin 
         res:= res * base + digit;
         Inc (i); 
        end; (* IF done *) 
       end; (* IF done *) 
      end; (* WHILE *)
      if negate then res:= - res; 
    end; (* IF done *)
    Result:= res;
    end;
      

  2.   

    function BitStrToHextStr(const ABitStr : String) : String;
    var
        vD : Byte;
        I : Integer;
        vHextStr : String;
        vP : PChar;
        vLen : Integer;
    begin
        vLen := Length(ABitStr);
        if vLen mod 4 > 0 then SetLength(vHextStr, vLen div 4 + 1)
        else SetLength(vHextStr, vLen div 4);    //初始化
        vD := 0;
        vP := PChar(ABitStr);
        I := 0; //开始计数
        vLen := 0;    while vP^ <> #0 do
        begin
            vD := vD shl 1;        if vP^ = '1' then vD := vD + 1;        Inc(vP);
            Inc(I);        if I = 4 then
            begin
                Inc(vLen);
                case vD of
                    0..9    : vHextStr[vLen] := Chr(vD + $30);
                    10..15  : vHextStr[vLen] := Chr(vD - 10 + $41);
                end;            I := 0;
                vD := 0;
            end;
        end;    if I > 0 then
        begin
            Inc(vLen);
            case vD of
                0..9    : vHextStr[vLen] := Chr(vD + $30);
                10..15  : vHextStr[vLen] := Chr(vD + $41);
            end;
        end;    Result := vHextStr;
    end;