今天,由于需要模拟一个RFID卡的过车记录过程!其中有一个需要模拟RFID标签的!
由于RFID标签数量有限!而BOSS又要我一下搞30万条数据到数据库中去(变态)!RFID卡由16进制组成。
于是在SQL Server中写下了两个关于16进制转换的函数,以随机的来生成所需RFID数据

/*
***************************
字符串转成16进制
作者:不得闲
QQ: 75492895
Email: appleak46@yahoo.com.cn
*************************** */
Create Function VarCharToHex( @Str Varchar ( 400 ))
returns varchar ( 800 )
as
begin
declare @i int , @Asi int , @ModS int , @res varchar ( 800 ), @Len int , @Cres varchar ( 4 ), @tempstr varbinary ( 400 )
select @i = 1 , @res = '' , @len = datalength ( @str ), @tempStr = Convert ( varbinary , @str )
while @i <= @len
begin
Select @Asi = substring ( @tempstr , 1 , 1 ), @Cres = ''
while @Asi <> 0
begin
select @Mods = @Asi % 16 ,
@Cres = Case when ( @Mods > 9 ) then Char ( Ascii ( ' A ' ) + @Mods - 10 ) + @Cres else Cast ( @Mods as varchar ( 4 )) + @Cres end ,
@Asi = @Asi / 16
end
Select @res = @res + @Cres , @tempStr = substring ( @tempStr , 2 , @len - 1 ), @i = @i + 1
end
return @res
end
/* ***************************
整数转换成16进制
作者:不得闲
QQ: 75492895
Email: appleak46@yahoo.com.cn
*************************** */
Create Function IntToHex( @IntNum int )
returns varchar ( 16 )
as
begin
declare @Mods int , @res varchar ( 16 )
set @res = ''
while @IntNum <> 0
begin
set @Mods = @IntNum % 16
if @Mods > 9
set @res = Char ( Ascii ( ' A ' ) + @Mods - 10 ) + @res
else
set @res = Cast ( @Mods as varchar ( 4 )) + @res
set @IntNum = @IntNum / 16
end
return @res
end
字符串转成16进制
作者:不得闲
QQ: 75492895
Email: appleak46@yahoo.com.cn
*************************** */
Create Function VarCharToHex( @Str Varchar ( 400 ))
returns varchar ( 800 )
as
begin
declare @i int , @Asi int , @ModS int , @res varchar ( 800 ), @Len int , @Cres varchar ( 4 ), @tempstr varbinary ( 400 )
select @i = 1 , @res = '' , @len = datalength ( @str ), @tempStr = Convert ( varbinary , @str )
while @i <= @len
begin
Select @Asi = substring ( @tempstr , 1 , 1 ), @Cres = ''
while @Asi <> 0
begin
select @Mods = @Asi % 16 ,
@Cres = Case when ( @Mods > 9 ) then Char ( Ascii ( ' A ' ) + @Mods - 10 ) + @Cres else Cast ( @Mods as varchar ( 4 )) + @Cres end ,
@Asi = @Asi / 16
end
Select @res = @res + @Cres , @tempStr = substring ( @tempStr , 2 , @len - 1 ), @i = @i + 1
end
return @res
end
/* ***************************
整数转换成16进制
作者:不得闲
QQ: 75492895
Email: appleak46@yahoo.com.cn
*************************** */
Create Function IntToHex( @IntNum int )
returns varchar ( 16 )
as
begin
declare @Mods int , @res varchar ( 16 )
set @res = ''
while @IntNum <> 0
begin
set @Mods = @IntNum % 16
if @Mods > 9
set @res = Char ( Ascii ( ' A ' ) + @Mods - 10 ) + @res
else
set @res = Cast ( @Mods as varchar ( 4 )) + @res
set @IntNum = @IntNum / 16
end
return @res
end
具体使用,直接传递要转换的信息进去则可
如
Select Dbo.VarcharToHex('不得闲')
select Dbo.IntToHex(125)
本文转自 不得闲 博客园博客,原文链接:http://www.cnblogs.com/DxSoft/archive/2010/01/02/1638057.html ,如需转载请自行联系原作者