当前位置:首页 » 编程语言 » sql十六进制转字符串
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql十六进制转字符串

发布时间: 2023-02-24 23:58:47

‘壹’ sql中十六进制转十进制语句

if exists(select * from sysobjects where name='p_zh' and type='p')
drop procere p_zh

create procere p_zh
@str varchar(10),--十六进制数
@ss int output--转换后的十进制数
as
begin
declare @len int --十六进制数的长度
declare @st char(1) --取十六进制字符串里的字符
declare @st1 int--将取出的十六进制字符串里的字符转换成十进制数
declare @le int --幂的值
set @ss=0
set @len=len(@str)
select @len
set @le=@len+1
while(@len>=1)
begin
set @st=substring(@str,@le-@len,1)
select @st

--判断是什么类的数,该怎么转换成十进制数
if(@st in('1','2','3','4','5','6','7','8','9','0')) set @st1=convert(int,@st)
if(@st in('A','a')) set @st1=10
if(@st in('B','b')) set @st1=11
if(@st in('C','c')) set @st1=12
if(@st in('D','d')) set @st1=13
if(@st in('E','e')) set @st1=14
if(@st in('F','f')) set @st1=15
set @len=@len-1
set @st1=@st1*power(16,@len)
set @ss=@ss+@st1
set @len=@len+1
set @len=@len-1
end
select @ss '十进制'
end

--例:
declare @sls varchar(10)
declare @ss int
set @sls='a5a8'
set @ss=0
execute p_zh @sls,@ss output
--可能有点烦,但我会的就是这个

‘贰’ 通过sql语句实现把如下数据转换为可识别的字符串,应该是十六进制转换为ASCII码。

要看你是什么编码。
如果是ASC码那么就是8位2进制一个字符,也就是两个十六进制位。
所以,你可以将这个十六进制字符串除0x以外,两位一组,每一组可以使用CHAR(0x0C)的方式转换为字符,再串加在一起就行了。
如果是UNICODE字符,那么就是4位十六进制(16位二进制)一组进行转换。
如第一个字符就是:select nchar(0x0C45),第二个字符就是select nchar(0x0000)

‘叁’ sql 读出来的16进制怎么转10进制 和

public string ConvertString(string value, int fromBase, int toBase)
{
int intValue = Convert.ToInt32(value, fromBase);
return Convert.ToString(intValue, toBase);
}
其中fromBase为原来的格式
toBase为将要转换成的格式
------------------------------------------------------------------------------
16进制转10进制:
int number = Convert.ToInt32("", 16);
string str = Convert.ToString(number, 10);
str就是你要10进制。
抱歉,我测试了一下,16进制的超过了UInt64.MaxValue,不能使用上面的方法,我现在不知道如何转化了。。。
你要是找到方法了,别忘告诉我!

‘肆’ 如何将sql 中十六进制转换十进制

利用SQLSERVER中的varbinary来间接实现。
16进制字符串转10进制bigint(0-FFFFFFFFFFFFFFFF):
由于二进制比较容易转换为bigint 所以先将字符串转为二进制varbinary,再转换为10进制

1
2
3
4
5
6
7
8

CREATE function [dbo].[hextoint](@s varchar(16))
returns bigint
begin
declare @result bigint
set @result=CONVERT(bigint, CONVERT(varbinary, CAST(N'0x' + @s AS char), 1))--最简单有效的方法
return @result
END
GO

10进制转16进制字符串(bigint正负数都可以):相同的思路目前可以将二进制varbinary转换为字符串比较容易,那么先将10进制转二进制再进行16进制字符串输出

1
2
3
4
5
6
7
8
9

CREATE function [dbo].[inttohex](@num bigint)
returns varchar(16)
begin
declare @num2 varbinary(8),@r varchar(50)
set @num2=convert(varbinary(8),@num)--直接转换为二进制
set @r= dbo.varbin2hexstr(@num2)--二进制转16进制字符串
return @r
end
GO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

CREATE function [dbo].[varbin2hexstr](
@bin varbinary(8000)
)returns varchar(8000)
as
begin
declare @re varchar(8000),@i int
select @re='',@i=datalength(@bin)
while @i>0
select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
+@re
,@i=@i-1
-- return('0x'+@re)
return @re
end
GO

以上代码测试环境WIN2003+SQLSERVER2008