2010-10-04 6 views
1

En CSharp si je nebinaire à la conversion hexadécimal dans tsql

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

je vais obtenir la sortie comme 9D. C'est le code le plus simple que je puisse écrire dans CSharp pour convertir Binary en Hexadecimal.

Existe-t-il une telle manière de faire la même chose en SQL (en utilisant une fonction intégrée s'il y en a une disponible). Est-il fn_varbintohexstr?

Y at-il une opération au niveau du bit qui aidera à faire la même conversion.

Merci

Répondre

2
select master.sys.fn_varbintohexstr(@binvalue) 

devrait faire l'affaire.

1

Je ne suis pas au courant d'une fonction intégrée qui va convertir un flux de bits en hexadécimal.

Une solution serait d'écrire une fonction CLR pour effectuer la conversion en utilisant le code .Net que vous avez ci-dessus. Ci-dessous une implémentation T-SQL, qui divise la chaîne en caractères individuels, puis les convertit en hexadécimal. Si vous avez votre propre table de nombres, le CTE peut être mis au rebut:

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); 
Questions connexes