| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
 跟大牛学C++学算法数据结构

问题点数：0  回复次数：0

-- SQL2000 Base64编码解码
create function dbo.base64_decode(@encoded_text varchar(8000))
returns varchar(6000)
as
begin
declare
@output varchar(8000),
@block_start int,
@encoded_length int,
@decoded_length int,
@mapr binary(122)
set @output=''
set @mapr = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   --  1-33
+ 0xFFFFFFFFFFFFFFFFFFFF3EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF   --  33-64
+ 0x000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF   --  65-96
+ 0x1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233               --  97-122

set @encoded_length = len(@encoded_text)
set @decoded_length = @encoded_length /4 *3

set @block_start = 1
while @block_start < @encoded_length
begin
-- decode the block and add to output
-- binary values between 1 and 4 bytes can be implicitly cast to INT
set @output = @output + CAST(CAST(CAST(
substring(@mapr,ascii(substring(@encoded_text,@block_start,1)),1) * 262144
+ substring(@mapr,ascii(substring(@encoded_text,@block_start + 1,1)),1) * 4096
+ substring(@mapr,ascii(substring(@encoded_text,@block_start + 2,1)),1) * 64
+ substring(@mapr,ascii(substring(@encoded_text,@block_start + 3,1)),1)
as integer) as binary(3)) as varchar(3))
set @block_start = @block_start + 4
end
if right(@encoded_text,2) = '=='
set @decoded_length = @decoded_length - 2
else if right(@encoded_text,1) = '='
set @decoded_length = @decoded_length - 1
return left(@output,@decoded_length)
end
• 1
• 1/1页
• 1