程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Delphi實現把10進制轉換成16進制的函數進制轉化

Delphi實現把10進制轉換成16進制的函數進制轉化

編輯:更多關於編程

      delphi中有直接把10進制轉換成16進制的函數:

    function IntToHex(Value: Integer; Digits: Integer): string; overload; 
    function IntToHex(Value: Int64; Digits: Integer): string; overload;

    unit uConversion;
    interface
    uses
    SysUtils,Math;
    type
    TConversion = class
    public
    //10 進制 to 2,8,16 進制
    function inttoBitStr(intstr: string): string;
    function IntToHexStr(intStr: string): String;//10 = 2
    function IntToOStr(intstr : string): string;

    //2進制 to 10,8,16 進制
    function BittoInt(BitStr: String): LongInt;// 2 = 10
    function BitStrToHextStr(const BitStr : String) : String;//2 = 16
    function BitStrToOStr(const BitStr : String) : String;//2 = 8

    //16 > 10 2 8 進制
    function HextoIntStr(HexStr: String): string;
    function HexToBitStr(HexStr: string): string;
    function HexToOStr(HexStr: string): string;

    //八進制轉換成二進制字符串
    function OtoBitStr(O : string):string;
    function OtoIntStr(O : string):string;
    function OtoHexStr(O : string):string;
    end;
    var
    TC :TConversion;


    implementation

    { TConversion }
    //2 進制 to 10 進制

    function TConversion.BittoInt(BitStr: String): LongInt;
    var
    i,Size: Integer;
    begin
    Result:=0;
    Size:=Length(BitStr);
    for i:=Size downto 1 do
    begin
    //例如 1010
    if Copy(BitStr,i,1)='1' then
    Result:=Result+(1 shl (Size-i));
    end;
    //第二種方法
    //二進制轉換為十進制 start
    {
    VAR
    str : String;
    Int : Integer;
    i : integer;

    Str := UpperCase(Edit1.Text);
    Int := 0;
    FOR i := 1 TO Length(str) DO
    Int := Int * 2 + ORD(str[i]) - 48;
    Edit2.Text:=IntToStr(int);
    }
    //二進制轉換為十進制 end;
    //第三中方法
    {
    function hextoint(s: string): Double;
    begin
    while Length(s) <>0 do
    begin //2^(長度-1)次方
    if s[1]='1' then Result:=Result+power(2,Length(s)-1);
    s:=Copy(s,2,Length(s));
    end
    end;
    }
    end;

    function TConversion.BitStrToHextStr(const BitStr: String): String;
    var
    vD : Byte;
    I : Integer;
    vHextStr : String;
    vP : PChar;
    vLen : Integer;
    begin
    vLen := Length(BitStr);
    if vLen mod 4 > 0 then
    begin
    SetLength(vHextStr, vLen div 4 + 1);
    vLen := vlen div 4 + 1;
    end
    else
    begin
    SetLength(vHextStr, vLen div 4);
    vLen := vlen div 4 ;
    end;

    //初始化
    vD := 0;
    vP := PChar(BitStr)+length(BitStr)-1;
    I := 0; //開始計數

    while vP^ <> #0 do
    begin
    if vp^ = '1' then
    begin
    case i of
    0: vD :=vd+1;
    1: vD :=vd+2;
    2: vD :=vd+4;
    3: vD :=vd+8;
    end;
    end;

    Dec(vP);
    Inc(I);
    if I = 4 then
    begin
    case vD of
    0..9 : vHextStr[vLen] := Chr(vD + $30);
    10..15 : vHextStr[vLen] := Chr(vD - 10 + $41);
    end;
    Dec(vLen);

    I := 0;
    vD := 0;
    end;
    end;

     

    if I > 0then
    begin
    case vD of
    0..9 : vHextStr[vLen] := Chr(vD + $30);
    10..15 : vHextStr[vLen] := Chr(vD + $41);
    end;
    end;

    Result := vHextStr;
    end;

    function TConversion.BitStrToOStr(const BitStr: String): String;
    var
    vD : Byte;
    I : Integer;
    vHextStr : String;
    vP : PChar;
    vLen : Integer;
    begin
    vLen := Length(BitStr);
    if vLen mod 3 > 0 then
    begin
    SetLength(vHextStr, vLen div 3 + 1);
    vLen := vlen div 3 + 1;
    end
    else
    begin
    SetLength(vHextStr, vLen div 3);
    vLen := vlen div 3 ;
    end;

    //初始化
    vD := 0;
    vP := PChar(BitStr)+length(BitStr)-1;
    I := 0; //開始計數

    while vP^ <> #0 do
    begin
    if vp^ = '1' then
    begin
    case i of
    0: vD :=vd+1;
    1: vD :=vd+2;
    2: vD :=vd+4;
    end;
    end;

    Dec(vP);
    Inc(I);
    if I = 3 then
    begin
    case vD of
    0..9 : vHextStr[vLen] := Chr(vD + $30);
    end;
    Dec(vLen);
    I := 0;
    vD := 0;
    end;
    end;

    if I > 0then
    begin
    case vD of
    0..9 : vHextStr[vLen] := Chr(vD + $30);
    end;
    end;

    Result := vHextStr;
    end;

    function TConversion.HexToBitStr(HexStr: string): string;
    const
    cBitStrings: array[0..15] of string =
    (
    '0000', '0001', '0010', '0011',
    '0100', '0101', '0110', '0111',
    '1000', '1001', '1010', '1011',
    '1100', '1101', '1110', '1111'
    );
    var
    I: Integer;
    begin
    Result := '';
    for I := 1 to Length(HexStr) do
    Result := Result + cBitStrings[StrToIntDef('$' + HexStr[I], 0)];
    while Pos('0', Result) = 1 do Delete(Result, 1, 1);
    end; { HexToBit }

    function TConversion.HextoIntStr(HexStr: String): string;
    begin
    result:= IntToStr(StrToInt('$' + (HexStr)));
    end;

    function TConversion.HexToOStr(HexStr: string): string;
    begin
    Result := BitStrToOStr(HexToBitStr(HexStr));
    end;

    function TConversion.inttoBitStr(intstr: string): string;
    var
    i :Integer;
    begin
    i := StrToInt(intstr);
    while i <>0 do
    begin //i mod 2取模,再使用format格式化
    result:=Format('%d'+result,[i mod 2]);
    i:=i div 2
    end
    end;
    //10進制裝換 2進制 第二種方法
    {function TConversion.IntToBitStr(Value, Size: Integer): String;
    var
    i: Integer;
    begin
    Result:='';
    for i:=Size-1 downto 0 do begin
    if Value and (1 shl i)<>0 then begin
    Result:=Result+'1';
    end else begin
    Result:=Result+'0';
    end;
    end;
    end;}


    function TConversion.IntToHexStr(intStr: string): String;
    begin
    Result:=inttoBitStr(intstr);
    end;

    function TConversion.IntToOStr(intstr: string): string;
    begin
    Result := BitStrToHextStr(inttoBitStr(intstr));
    end;

    function TConversion.OtoBitStr(O: string): string;

    const
    cBitStrings: array[0..7] of string =
    (
    '000', '001', '010', '011',
    '100', '101', '110', '111'
    ); 
    var
    i,j: Integer;
    begin
    Result := '';
    for I := 1 to Length(o) do
    begin
    j:=strtoint(o[i]);
    Result := Result + cBitStrings[j];
    end;
    while Pos('0', Result) = 1 do Delete(Result, 1, 1);
    end;
    function TConversion.OtoHexStr(O: string): string;
    begin
    Result :=BitStrToHextStr(OtoBitStr(o));
    end;

     

    function TConversion.OtoIntStr(O: string): string;
    begin
    Result := OToIntStr(OtoBitStr(o));
    end;

    end.

     

     

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved