提供两个函数,可以进行十进制与二进制数之间的转换:
CREATE function [dbo].[D2B](@n int)
returns nvarchar(63) with encryption
as
begin
declare @i int
declare @s nvarchar(64)
set @i = 30 -- 不考虑负数 31位
set @s = ''
while (@i>=0)
begin
set @s=@s+convert(nvarchar(100),[dbo].[G2](@n,@i))
set @i=@i-1
end
return @s
-- print @s
end
GO
CREATE function [dbo].[B2D](@s nvarchar(63))
returns int with encryption
as
begin
declare @i int
declare @n int
set @n=0
set @i = 0 -- 不考虑负数 31位
-- declare @s nvarchar(63)
-- set @s = '1110'
-- print len(@s)
while (@i<LEN(@s))
begin
if (SUBSTRING(@s,(LEN(@s)-@i),1)='1')
begin
set @n = @n+POWER(2,@i)
-- print @s+';'+convert(nvarchar(10),@n) +';'+ convert(nvarchar(10),@i)
end
set @i=@i+1
end
return @n
-- print '--' + @n
end
GO
以下为执行结果:
select dbo.d2b(1729)
0000000000000000000011011000001
select dbo.b2d('0000000000000000000011011000001')
1729