OVH Cloud OVH Cloud

methode binaire simple

1 réponse
Avatar
Christophe
plutot que de me prendre la tete avec un truc simple

avez vous une methode sans fontion qui puisse me convertir une chaine du
genre varchar(mais comme un binaire) '1001' en INT = 9
qui vaut en integer 9
et faire l'inverse eventuellement ?


si je trouve un 9 je retrouve ma chaine '1001' ???

1 réponse

Avatar
Steve Kass
Christophe,

Voilà quelque fonctions qui font les conversions:

create function entier_à_chaine_bin(
@e int
) returns varchar(32) as begin
declare @c varchar(32)
declare @p int
set @p = 1
set @c = cast(cast(@p&@e as bit) as char(1))
while @p < power(2,30) begin
set @p = @p*2
if @p > @e break
set @c = cast(cast(@p&@e as bit) as char(1)) + @c
end
return @c
end
go

select dbo.entier_à_chaine_bin(e)
from (
select 0 as e union all
select 13 union all
select 2147483647 union all
select 1023
) E
go

create function chaine_bin_à_entier(
@c varchar(32)
) returns int as begin
return (
select coalesce(sum(power(2,i)),0)
from (
-- n'importe quoi table donnant les valeurs 0 à 30
select top 31 ProductID-1 as i
from Northwind..Products
order by ProductID
) P
where substring(@c,i+1,1) = '1'
and i < len(@c)
)
end
go


select dbo.chaine_bin_à_entier(e)
from (
select '0' as e union all
select '1101' union all
select '1111111111111111111111111111111' union all
select '1111111111'
) E
go

drop function entier_à_chaine_bin, chaine_bin_à_entier

-- Steve Kass
-- Drew University
-- 26BC61E0-F0CF-4A6D-828F-D480DB5AEFC0

Christophe wrote:

plutot que de me prendre la tete avec un truc simple

avez vous une methode sans fontion qui puisse me convertir une chaine du
genre varchar(mais comme un binaire) '1001' en INT = 9
qui vaut en integer 9
et faire l'inverse eventuellement ?


si je trouve un 9 je retrouve ma chaine '1001' ???