当前位置: 代码迷 >> Sql Server >> 负数转成16进制字符串,该怎么解决
  详细解决方案

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

热度:51   发布时间:2016-04-24 19:56:34.0
负数转成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
*/
  相关解决方案