日期:2014-05-18 浏览次数:20559 次
Create proc HexChange
( @Import int, --输入的进制
@Export int,--输出的进制
@Input nvarchar(100),--输入内容
@Output nvarchar(100) output--输出内容
)
AS
set @Output=''
--定义常规变量
declare @strLength int --输入的字符串长度
declare @i int --整形变量
declare @j int --整形变量
declare @k int --整形变量
declare @a nvarchar(100)--字符串变量
declare @eight nvarchar(100)--截取字符串存储
declare @open int --开关1表示输出需要转换0表示不转换
set @open=0
set @eight=''
if(@import not in (2,8,10,16) or @Export not in (2,8,10,16))
begin
print '输入输出的进制有误,请确认!'
set @Output=null
end
else if(@import=@Export)
begin
print '输入输出的禁止一样,有必要这样吗?'
set @Output=@Input
end
else if(@Input='0')
begin
set @Output='0'
end
else
begin
--输入二进制
if(@import=2)
begin
--输出八进制
if(@Export=8)
begin
set @open=1
set @strLength=LEN(@Input)
set @i=0
while(@strLength>3)
begin
select @eight=right(@Input,3)
set @Input=LEFT(@Input,@strLength-3)
set @strLength=@strLength-3
set @j=3
set @k=0
while(@j>0)
begin
set @k+=CAST(right(@eight,1) as int)*POWER(2,3-@j)
set @eight=LEFT(@eight,@j-1)
set @j=@j-1
end
set @Output+=CAST(@k as nvarchar(100))
end
set @i=LEN(@Input)
set @j=0
set @k=0
if(@i>0)
begin
while(@i>0)
begin
set @k+=CAST(right(@Input,1) as int)*POWER(2,@j)
set @i=@i-1
set @Input=LEFT(@Input,@i)
set @j=@j+1
print @k
end
set @Output+=CAST(@k as nvarchar(100))
print @Output
end
end
--输出十进制
else if(@Export=10)
begin
set @strLength=LEN(@Input)
set @k=0
set @i=0
while(@strLength>0)
begin
set @k+=CAST(right(@Input,1) as int)*POWER(2,@i)
set @Input=LEFT(@Input,@strLength-1)
set @strLength=@strLength-1
set @i=@i+1
end
set @Output=CAST(@k as nvarchar(100))
end
--输出十六进制
else if(@Export=16)
begin
set @open=1
set @strLength=LEN(@Input)
set @i=0
while(@strLength>4)
begin
select @eight=right(@Input,4)
set @Input=LEFT(@Input,@strLength-4)
set @strLength=@strLength-4
set @j=4
set @k=0
while(@j>0)
begin
set @k+=CAST(right(@eight,1) as int)*POWER(2,4-@j)
set @eight=LEFT(@eight,@j-1)
set @j=@j-1
end
select @a=case @k when 10 then 'A'
when 11 then 'B'
when 12 then 'C'
when 13 then 'D'
when 14 then 'E'
when 15 then 'F'
else CAST(@k as nvarchar(100))end
set @Output+=@a
end
set @i=LEN(@Input)
set @j=0
set @k=0
if(@i>0)
begin
while(@i>0)
begin
set @k+=CAST(right(@Input,1) as int)*POWER(2,@j)
set @i=@i-1
set @Input=LEFT(@Input,@i)
set @j=@j+1
end
select @a=case @k when 10 then 'A'
when 11 then 'B'
when 12 then 'C'
when 13 then 'D'
when 14 then 'E'