求一道编程题

时间:2022-03-06 23:33:48
编写一个函数将32位整型参数分解为一个4字节数组,要求高位在前,低位在后,比如将0XOOFEOOAC分解为数组OXOO,OXFE,OXOO,OXAC(注释:OX不是值,表示16进制数)

8 个解决方案

#1


先做个记号

#2


发错地方了吧,用MS_SQL是可以实现,但是好象是没有数组这种东西的吧

#3


create function SplitVarBin(@a varbinary(100))
returns @t table (a varbinary(1))
as
begin

declare @v nvarchar(20),@te nvarchar(6)
declare @i int,@j int,@x int
declare @l int

set @v=upper(master.dbo.fn_varbintohexstr(@a))
set @v=replace(@v,'0X','')

while len(@v)>0
begin
set @j=1
set @i=0
set @x=0
set @te=left(@v,2)
set @v=right(@v,len(@v)-2)

while @j>-1
begin
set @x=@x+1
set @l=case substring(@te,@x,1) when 'A' then 10
       when 'B' then 11
       when 'C' then 12
       when 'D' then 13
       when 'E' then 14
       when 'F' then 15
       else
 cast(substring(@te,@x,1) as int)
       end
set @i=@i+@l*power(16,@j)
set @j=@j-1
end
insert @t select @i
end
return
end
-------
select * from dbo.Splitvarbin(0xaaff34008844ddee)
--result
a    
---- 
0xAA
0xFF
0x34
0x00
0x88
0x44
0xDD
0xEE

#4


ding

#5


学习

#6


可以通过分拆来实现.

#7


use test_yc
go
/*编写一个函数将32位整型参数分解为一个4字节数组,要求高位在前,
低位在后,比如将0XOOFEOOAC分解为数组OXOO,OXFE,OXOO,OXAC
(注释:OX不是值,表示16进制数)
*/
alter function str32_trans
(@str nvarchar(50))
returns nvarchar(50)
as 
begin
declare @str0  nvarchar(10)
declare @str1  nvarchar(10)
declare @str2  nvarchar(10)
declare @str3  nvarchar(10)
declare @str4  nvarchar(10)
declare @strTrans  nvarchar(50)
select @str0=left(@str,2)
select @str1=right(left(@str,4),2)
select @str2=right(left(@str,6),2)
select @str3=right(left(@str,8),2)
select @str4=right(@str,2)
select @strTrans=@str0+@str1+','+@str0+@str2+','+@str0+@str3+','+@str0+@str4
return @strTrans
end
--执行
select dbo.str32_trans('0xasasasas')

#8


感谢大家的帮忙,请问要怎么给别人打分呢///
请问一下上面的语句要在哪才可以运行呢,谢谢

#1


先做个记号

#2


发错地方了吧,用MS_SQL是可以实现,但是好象是没有数组这种东西的吧

#3


create function SplitVarBin(@a varbinary(100))
returns @t table (a varbinary(1))
as
begin

declare @v nvarchar(20),@te nvarchar(6)
declare @i int,@j int,@x int
declare @l int

set @v=upper(master.dbo.fn_varbintohexstr(@a))
set @v=replace(@v,'0X','')

while len(@v)>0
begin
set @j=1
set @i=0
set @x=0
set @te=left(@v,2)
set @v=right(@v,len(@v)-2)

while @j>-1
begin
set @x=@x+1
set @l=case substring(@te,@x,1) when 'A' then 10
       when 'B' then 11
       when 'C' then 12
       when 'D' then 13
       when 'E' then 14
       when 'F' then 15
       else
 cast(substring(@te,@x,1) as int)
       end
set @i=@i+@l*power(16,@j)
set @j=@j-1
end
insert @t select @i
end
return
end
-------
select * from dbo.Splitvarbin(0xaaff34008844ddee)
--result
a    
---- 
0xAA
0xFF
0x34
0x00
0x88
0x44
0xDD
0xEE

#4


ding

#5


学习

#6


可以通过分拆来实现.

#7


use test_yc
go
/*编写一个函数将32位整型参数分解为一个4字节数组,要求高位在前,
低位在后,比如将0XOOFEOOAC分解为数组OXOO,OXFE,OXOO,OXAC
(注释:OX不是值,表示16进制数)
*/
alter function str32_trans
(@str nvarchar(50))
returns nvarchar(50)
as 
begin
declare @str0  nvarchar(10)
declare @str1  nvarchar(10)
declare @str2  nvarchar(10)
declare @str3  nvarchar(10)
declare @str4  nvarchar(10)
declare @strTrans  nvarchar(50)
select @str0=left(@str,2)
select @str1=right(left(@str,4),2)
select @str2=right(left(@str,6),2)
select @str3=right(left(@str,8),2)
select @str4=right(@str,2)
select @strTrans=@str0+@str1+','+@str0+@str2+','+@str0+@str3+','+@str0+@str4
return @strTrans
end
--执行
select dbo.str32_trans('0xasasasas')

#8


感谢大家的帮忙,请问要怎么给别人打分呢///
请问一下上面的语句要在哪才可以运行呢,谢谢