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


在网上看到有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 行受影响)



posted @   ok_008  阅读(2048)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
历史上的今天:
2007-05-29 SQL Server数据库性能优化技术(转)
2007-05-29 数据库优化设计方案(转)
给我写信
点击右上角即可分享
微信分享提示