SQLSERVER 16进制与10进制转换

原文 SQLSERVER 16进制与10进制转换

最近工控项目中遇到的16进制与10进制转换,在.NET中比较容易实现,在SQLSERVER中发现没有直接的转换,尤其是出现超出范围的long负数,即无符号64位整数在sqlserver中的存储。网上找的很多方法只适用于32位整数和64位正整数,64位负数无法实现,现将使用的转换方法记录下来。

利用SQLSERVER中的varbinary来间接实现。

16进制字符串转10进制bigint(0-FFFFFFFFFFFFFFFF):

由于二进制比较容易转换为bigint 所以先将字符串转为二进制varbinary,再转换为10进制

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进制字符串输出

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

 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

时间: 2024-07-28 17:41:11

SQLSERVER 16进制与10进制转换的相关文章

SQL SERVER 16进制与10进制转换

最近工控项目中遇到的16进制与10进制转换,在.NET中比较容易实现,在SQLSERVER中发现没有直接 的转换,尤其是出现超出范围的long负数,即无符号64位整数在sqlserver中的存储.网上找的很多方法 只适用于32位整数和64位正整数,64位负数无法实现,现将使用的转换方法记录下来. 利用SQLSERVER中的varbinary来间接实现. 16进制字符串转10进制bigint(0-FFFFFFFFFFFFFFFF): 由于二进制比较容易转换为bigint 所以先将字符串转为二进制v

string-c++16进制转10进制问题

问题描述 c++16进制转10进制问题 我用string存储了输入的一个16进制数,现在要把它转换为10进制输出,除了用数位乘上权值之外还有什么方法办到这一点吗? 另外,16进制用int 储存吗?如果可以需要什么语句呢? 解决方案 给你说两个函数,都可以解决这个问题 1.sscanf(str,"%x",&iNum) 2.iNum = strtol(str,**p,16); 你可以查查资料,这两个函数都可以把十六进制的字符串转换成十进制数据: 另外十六进制可以用int存储,只不过

oracle_16进制与10进制转换小示例

--16进制转10进制,用to_number,里面的参数是16进制的数据,且参数用单引号括起SQL> select to_number('ff','xx') from dual; TO_NUMBER('FF','XX')--------------------                 255 --10进制转16进制,用to_char,里面的参数是10进制的数据,且参数不用单引号括起SQL> select to_char(255,'xx') from dual; TO_CHAR(255,

asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)

其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字,其中fromBase参数为进制的格式,只能是2.8.10及16: 如Convert.ToInt32("0010",2)执行的结果为2; Convert.ToString(int value, int toBase): 可以把一个数字转换为不同进制数值的字符串格式,其中toBase参数为进制的格式,只能是2.

2进制、8进制、10进制、16进制...各种进制间的轻松转换

转换 在.net Framework中,System.Convert类中提供了较为全面的各种类型.数值之间的转换功能.其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字,其中fromBase参数为进制的格式,只能是2.8.10及16: 如Convert.ToInt32("0010",2)执行的结果为2; Convert.ToString(int value,

2进制~62进制与10进制的转换

转换 效果如下: //var str="AZ";  //for(var i=0;i<str.length;i++)trace(str.charCodeAt(i));  //charCode:0-9:(48-57);A-Z:(65-90);a-z:(97-122);  //将10进制数N转换成d进制数(以0-9,A-Z,a-z字符表示),d为2-62  function jh_10toD(N, d) {    N = Math.floor(Number(N));    d = Ma

C# 36进制转10进制

代码是Java转过来的,变量名都没有改--有空再整理一下好了.       public long toDecimal(string input, long bs)    {        try        {            long Bigtemp = 0, temp = 1;            int len = input.Length;            for (int i = len - 1; i >= 0; i--)            {          

Delphi实现把10进制转换成16进制的函数进制转化

  delphi中有直接把10进制转换成16进制的函数: function IntToHex(Value: Integer; Digits: Integer): string; overload;  function IntToHex(Value: Int64; Digits: Integer): string; overload; unit uConversion; interface uses SysUtils,Math; type TConversion = class public //

java 10进制转16进制带ox格式输出

问题描述 java 10进制转16进制带ox格式输出 请教:java 怎么把10进制转16进制并且 带ox格式输出 如 60(10进制) 输出 : 0x00,0x00,0x00,0x3c 解决方案 如下代码: public static void main(String[] args) throws IOException { int num=3000; ByteArrayOutputStream baos=new ByteArrayOutputStream(); DataOutputStrea