首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

负数转成16进制字符串,该怎么解决

2013-11-08 
负数转成16进制字符串这个为C#的代码。 string szTID -2161622263693857431long lTID 0long.TryPar

负数转成16进制字符串
   
这个为C#的代码。
 string szTID = "-2161622263693857431";
                long lTID = 0;
                long.TryParse(szTID, out lTID);
                lTID.ToString("X2").ToUpper();
                return;


找高手解决。
[解决办法]


declare @num bigint set @num=-2161622263693857431
select convert(varbinary, @num)
/*
0xE200600101F3AD69
*/


新表用varbinary类型就自动转换了。
[解决办法]
一开始是这样:


--1.一开始这么转化,但是有问题,关键在于你的这个数太大,超出了int的范围
select cast(-2161622263693857431 as varbinary)
/*
0x1300000097520CFEFE9FFF1D
*/


--2.这样就行了,转化为bigint,在转为varbianry,但是这个不是字符串,所以还是不行
select cast(cast(-2161622263693857431 as bigint) as varbinary) 
/*
0xE200600101F3AD69
*/


但是发现这样转化的是varbinary,而不是varchar,所以这里调用函数,把varbinary转化为varchar:

use 你的数据库
go

IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL
   DROP FUNCTION dbo.varbin2hexstr
GO
    
    
--这个函数实现了把varbinary类型数据转化为varchar类型的数据    
CREATE function varbin2hexstr(
@bin varbinary(max)
)returns varchar(max)
as
begin
    declare @re varchar(max),@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


--3.调用函数dbo.varbin2hexstr,把varbinary转为字符串,这样才行
select dbo.varbin2hexstr(cast(cast(-2161622263693857431 as bigint) as varbinary))
/*
E200600101F3AD69
*/

热点排行