|
|

本帖最后由 南坡 于 2026-4-13 17:56 编辑
编码_BASE64解码 传入长度不标准的base64文本的时候,之前的版本可以自动处理,现在的版本不能正确解码,会丢失最后几个字符,建议做如下修改,自动补全处理最后的字符:
|
| 编码_BASE64解码 | 字节集 | | |
| 编码文本 | 文本型 | | | | 去除右边空白字节集 | 逻辑型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | Alphabets | 文本型 | | | | aryPhase | 字节集 | | | | aryBin | 字节集 | | | | dwSize | 整数型 | | | | dwMult | 整数型 | | | | nMaxCount | 整数型 | | | | aryData | 字节集 | | | | aryTemp | 字节型 | | 4 | | i | 整数型 | | | | n | 整数型 | | | | dwMod | 整数型 | | |
aryBin = 到字节集 (编码文本 )aryBin = 子字节集替换 (aryBin, { 32 }, , , ) aryBin = 子字节集替换 (aryBin, { 13, 10 }, , , ) dwSize = 取字节集长度 (aryBin ) 如果真 (dwSize = 0 ) 返回 ({ })Alphabets = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”aryPhase = 取空白字节集 (256 ) 计次循环首 (64, i ) aryPhase [取代码 (Alphabets, i )] = i - 1 计次循环尾 ()dwMult = dwSize \ 4 dwMod = dwSize % 4 如果真 (dwMod ≠ 0 ) dwMult = dwMult + 1 判断 (倒找字节集 (aryBin, { 61, 61 }, ) ≠ -1 ) nMaxCount = 2 判断 (倒找字节集 (aryBin, { 61 }, ) ≠ -1 ) nMaxCount = 1  aryData = 取空白字节集 (dwMult × 3)n = 1 变量循环首 (1, dwSize - dwMod, 4, i ) aryTemp [1 ] = aryPhase [aryBin [i ]]  aryTemp [2 ] = aryPhase [aryBin [i + 1 ]]  aryTemp [3 ] = aryPhase [aryBin [i + 2 ]]  aryTemp [4 ] = aryPhase [aryBin [i + 3 ]]  aryData [n ] = 左移 (aryTemp [1 ], 2 ) + 位与 (右移 (aryTemp [2 ], 4 ), 3 ) aryData [n + 1 ] = 位与 (左移 (aryTemp [2 ], 4 ), 240 ) + 位与 (右移 (aryTemp [3 ], 2 ), 15 ) aryData [n + 2 ] = 位与 (左移 (aryTemp [3 ], 6 ), 192 ) + aryTemp [4 ] n = n + 3 变量循环尾 () 如果真 (dwMod > 0 ) 连续赋值 (0, aryTemp [1 ], aryTemp [2 ], aryTemp [3 ], aryTemp [4 ]) 判断 (dwMod = 1 )  aryTemp [1 ] = aryPhase [aryBin [i ]]  判断 (dwMod = 2 )  aryTemp [1 ] = aryPhase [aryBin [i ]]   aryTemp [2 ] = aryPhase [aryBin [i + 1 ]]   aryTemp [1 ] = aryPhase [aryBin [i ]]   aryTemp [2 ] = aryPhase [aryBin [i + 1 ]]   aryTemp [3 ] = aryPhase [aryBin [i + 2 ]]    aryData [n ] = 左移 (aryTemp [1 ], 2 ) + 位与 (右移 (aryTemp [2 ], 4 ), 3 ) aryData [n + 1 ] = 位与 (左移 (aryTemp [2 ], 4 ), 240 ) + 位与 (右移 (aryTemp [3 ], 2 ), 15 ) aryData [n + 2 ] = 位与 (左移 (aryTemp [3 ], 6 ), 192 ) + aryTemp [4 ]assignZero (aryData, dwMult × 3 - nMaxCount, 真) 如果真 (去除右边空白字节集 ) aryData = 去除右边空字节集 (aryData )返回 (aryData) |
|