如果我做了CSharp
string binary = "10011101";
MessageBox.Show(Convert.ToInt32(binary, 2).ToString("X"));
我将输出为9D。这是我可以在CSharp中编写的最简单的代码,用于将二进制转换为十六进制。
是否有任何这样的方法在SQL中也这样做(使用一些内置函数,如果有的话)。是fn_varbintohexstr?
是否有任何按位操作有助于进行相同的转换。
由于
答案 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);