用户名:
密 码:
 
 
软 件 安 装
软 件 知 识
经 验 技 巧
学 习 指 南
相 关 下 载
站内搜索
 
 
首页 >> Delphi

任意进制之间的转换

作者:未知   时间:2004-07-11 16:09:53

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; (* 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; 

[ 责编:felixsun 点击: ]

浏览评论 | 发给好友 | 打印版本

 相关文章


Copyright © 2004 SunCN.Net All rights reserved. 阳光网络 版权所有 Power by iWPC