SQLSERVER 16进制转10进制

原码、补码、反码参考:

http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

进制转换参考:

http://www.cnblogs.com/xugang/archive/2012/10/22/2733593.html 

负数转换为16进制

http://blog.csdn.net/xiaochunyong/article/details/7616625  

 

--16进制数"0x7FFFFFFFFFFFFFFF "转化为进制

select CONVERT(bigint,cast(0x7FFFFFFFFFFFFFFF as varbinary)) as converted

经验证:可以直接给bigint赋值16进制格式 输出时直接输出为转换后的10进制格式,如下所示

declare @temp bigint=0x80753903004B1200

select @temp

Bigint取值范围

bigint-2^63 (-9,223,372,036,854,775,808) 至 2^63-1 (9,223,372,036,854,775,807). 存储大小为8个字节.

假设16进制字符长度为16 如下所示16进制字符串范围

 FFFFFFFFFFFFFFFF-0

 7FFFFFFFFFFFFFFF:十进制为9 223 372 036 854 775 8072^63-1)

 大于该值的16进制全部为负数 

 8000000000000000:转为bigint后值为 -9223372036854775808-2^63 )

负数转换规律:超过最大值的取补码加负号 并且-1

8000000000000001 补码为0x7FFFFFFFFFFFFFFE 

7FFFFFFFFFFFFFFE 取负-1就可以得到转换后的负数值。

原文地址:https://www.cnblogs.com/merray/p/3501991.html