在sql中进行二进制到十六进制的转换

时间:2010-10-04 06:37:47

标签: sql-server-2005

如果我做了CSharp

string binary = "10011101";
MessageBox.Show(Convert.ToInt32(binary, 2).ToString("X"));

我将输出为9D。这是我可以在CSharp中编写的最简单的代码,用于将二进制转换为十六进制。

是否有任何这样的方法在SQL中也这样做(使用一些内置函数,如果有的话)。是fn_varbintohexstr?

是否有任何按位操作有助于进行相同的转换。

由于

2 个答案:

答案 0 :(得分:2)

select master.sys.fn_varbintohexstr(@binvalue)

应该做的伎俩。

答案 1 :(得分:1)

我不知道内置函数会将比特流转换为十六进制。

一种解决方案是编写CLR函数,使用上面的.Net代码进行转换。

下面是一个T-SQL实现,它将字符串拆分为单个字符,然后将它们转换为十六进制。如果您有自己的数字表,则可以丢弃CTE:

DECLARE @vch_string VARCHAR(MAX)
DECLARE @chr_delim CHAR(1)
SET @chr_delim = ','
SET @vch_string = '10011101'

-- replace nums_cte with a join to a numbers table if you have one
-- since it will be far more efficient.
;WITH nums_cte
AS
(
SELECT 1 AS n
UNION ALL
SELECT n+1 FROM nums_cte
WHERE n < LEN(@vch_string)
)

SELECT CAST(SUM(CAST(SUBSTRING(s,n,1) AS INT) * POWER(2,n -1)) AS VARBINARY(1)) AS hexvalue
FROM (SELECT REVERSE(@vch_string) AS s) AS D
JOIN nums_cte
ON n <= LEN(s)
OPTION (MAXRECURSION 0);
相关问题