X进制与10进制之间的转换

本文介绍了一种实现X进制与10进制之间相互转换的方法,包括从X进制到10进制及从10进制到X进制的转换过程。通过SQL递归查询的方式实现了任意进制间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在网上看到有16进制转为10进制,10转为16进制的方法,我这里做个X进制与10进制之间转换,算法与16<-->10直接的转换算法是相似的。

X进制与10进制之间的转换:

Declare @x nvarchar(1024)
Declare @y int
Declare @sys int --x进制

Set @x='30'
Set @sys=21 --@sys=21表示二十一进制

--x进制转换成10进制
;With 
T1 
As(
    
Select 
            X
=Stuff(Reverse(@x),1,1,''),
            Y
=Convert(int,Case Isnumeric(Right(@x,1)) When 0 Then ASCII(Upper(Right(@x,1)))-55 Else Right(@x,1End*Power(@sys,0)),
            L
=Convert(int,1)
    
Union All
    
Select 
            X
=Stuff(X,1,1,''),
            Y
=Convert(int,Case Isnumeric(Left(X,1)) When 0 Then ASCII(Upper(Left(X,1)))-55 Else Left(X,1End*Power(@sys,L)),
            L
=L+Convert(int,1)
    
From T1
    
Where X>''    
)
Select [10进制-->X进制]=SUM(Y) From T1

--10进制换成x进制转
Set @y=32
Set @sys=2 --@sys=2表示二进制
;With
T1 
As(
    
Select 
            X
=Convert(int,@y/@sys),
            Y
=Convert(nvarchar(1024),Case (@y%@sys)/10 When 0 Then Rtrim(@y%@sysElse Char(@y%@sys%10+65End),
            L
=Convert(int,1)
    
Union All
    
Select 
            X
=X/@sys,
            Y
=Convert(nvarchar(1024),Case (X%@sys)/10 When 0 Then Rtrim(X%@sysElse Char(X%@sys%10+65End+Y),
            L
=Convert(int,L+1)
    
From T1 Where X>0
)
Select Top 1 [x进制-->10进制]=From T1  Order By L Desc




结果:
10进制-->X进制
-----------
63

(1 行受影响)

x进制-->10进制
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
100000

(1 行受影响)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值