这是2到36的任意进制转换的程序代码: const MinBase = 2; MaxBase = 36; function NumToStr (num, len, base: Integer; neg: Boolean; fill: char): string; // num = 要转换的数 // len = 生成字符串的最小长度 // base = 进制数 2 = 二进制 // neg = 是否允许负数 // fill = 填充字符用于补满字符串长度// // 用法: // NumToStr (45, 8, 2, false, '0') > '00101101' // NumToStr (45, 4, 8, false, '0') > '0055' // NumToStr (45, 4, 10, false, ' ') > ' 45' // NumToStr (45, 4, 16, false, '0') > '002D' // NumToStr (45, 0, 36, false, ' ') > '19' var s: string; digit: Integer; begin num:= ABS (num); if ((base >= MinBase) and (base <= MaxBase)) then begin s:= ''; repeat digit:= num mod base; if digit < 10 then Insert (CHR (digit + 48), s, 1) else Insert (CHR (digit + 55), s, 1); num:= num div base; until num = 0; if neg then Insert ('-', s, 1); while Length(s) < len do Insert (fill, s, 1); end; Result:= s; end; 从字符串转换回数: 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; end; 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; 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; end; end; if negate then res:= -1 * res; end; Result:= res; end;
Delphi--2~36进制的转换
最新推荐文章于 2021-03-09 16:06:27 发布