hibase32-cj API完整参考6个核心函数的参数、返回值与用法示例速查【免费下载链接】hibase32-cjBase32(RFC 4648)编码/解码库项目地址: https://gitcode.com/Cangjie-TPC/hibase32-cjhibase32-cj是一个使用仓颉语言实现的Base32RFC 4648编码/解码库支持 UTF-8 中文文本与原始字节的互转。本文是一份完整的 API 速查指南逐一讲解 6 个核心函数的参数、返回值与用法示例帮你在 5 分钟内掌握全部接口避免踩坑。为什么选择 hibase32-cjBase32 编码把任意二进制数据映射为A-Z和2-7共 31 个安全字符天然不区分大小写歧义字符表不含0/O/1/I常用于 Token、验证码、文件名编码等场景。hibase32-cj 的优势⚡纯仓颉实现无外部 JS 依赖encodeBytes与unsignedRightShift均为自行实现UTF-8 友好中文、emoji、生僻字如均可正确编解码测试充分配套 base32_test.cj 覆盖 ASCII、UTF-8、数组、异常等场景项目结构非常简单核心逻辑全部在 src/base32.cj 一个文件里src/ ├── base32.cj # 核心代码全部 6 个核心函数都在这里 └── test/ └── base32_test.cj # 单元测试6个核心函数一览表函数参数返回值一句话用途encode(input: String)待编码的字符串String字符串 → Base32encode(input: ArrayUInt8)待编码的字节数组String字节数组 → Base32decodeAsString(base32Str)Base32 字符串StringBase32 → UTF-8 字符串decodeAsBytes(base32Str)Base32 字符串ArrayUInt8Base32 → 字节数组unsignedRightShift(value, shift)被移位值、移位位数Int6432 位无符号右移testVaildBase32(str)待校验字符串Bool校验是否为合法 Base32 字符 记忆技巧encode 管编码、decode 管解码、unsignedRightShift 是底层位运算、testVaildBase32 是输入校验四个角色各司其职。encode(String)字符串编码函数怎么调用源码位置src/base32.cj#L17-L19public func encode(input: String): String参数input— 任意 UTF-8 字符串中文、英文、emoji 均可返回值标准 Base32 编码字符串末尾按需补齐内部流程字符串先通过toArray()转为字节序列再交给私有的 encodeBytes 完成位运算用法示例摘自 README.md 功能示例encode(Hello) // JBSWY3DP encode(中文) // 4S4K3ZUWQ4 encode() // 6CQJZDQencode(Array )字节数组编码函数参数说明源码位置src/base32.cj#L13-L15public func encode(input: ArrayUInt8): String与字符串版本同名的重载函数适合处理二进制数据文件内容、Buffer 等。参数input—UInt8字节数组返回值Base32 字符串用法示例与 base32_test.cj#L84-L88 中testUint8Arryay用例一致var arr ArrayListUInt8([72, 101, 108, 108, 111]).toArray() encode(arr) // JBSWY3DP✅ 字节[72, 101, 108, 108, 111]正是Hello的 ASCII 值两种入参编码结果完全一致。decodeAsStringBase32解码为字符串的完整用法源码位置src/base32.cj#L21-L23public func decodeAsString(base32Str: String): String参数base32Str— 标准 Base32 字符串允许末尾填充返回值按 UTF-8 还原后的字符串实现原理内部先调用decodeAsBytes得到字节数组再由String.fromUtf8还原为文本用法示例对应 base32_test.cj#L104-L112 的testUtf8DecodedecodeAsString(JBSQ) // He decodeAsString(4S4K3ZUWQ4) // 中文 decodeAsString(6CQJZDQ) // ⚠️ 两个常见异常输入含非法字符小写字母、0/1/8/9、空格等→ 抛出Exception(Invalid base32 characters)解码出的字节不是合法 UTF-8 → 抛出OverflowException例如解码7A字节 0x7A 无法独立构成 UTF-8下图就是一个真实的解码异常堆栈指向 base32.cj 的decode调用链decodeAsBytes解码为字节数组的参数与返回值源码位置src/base32.cj#L25-L125public func decodeAsBytes(base32Str: String): ArrayUInt8参数base32Str— Base32 字符串返回值ArrayUInt8字节数组边界行为空字符串 → 返回空数组不抛异常非法字符 → 抛出Exception解码采用「8 字符一组」批量处理 剩余 2/4/5/7 字符的余数分支保证填充被正确处理如果你要的是解码成可打印文本直接用decodeAsString需要操作原始二进制写文件、协议组包时才用decodeAsBytes。unsignedRightShift仓颉版无符号右移怎么用源码位置src/base32.cj#L206-L216public func unsignedRightShift(value: Int64, shift: Int64): Int64这是本库对 JavaScript运算符的等价实现也是 Base32 位拼接的底层基石参数value— 被移位值shift— 右移位数返回值32 位无符号右移结果细节移位位数会先对 32 取模shift % 32 0时直接返回原值用法示例摘自 base32_test.cj#L129-L158 的testUnsignedRightShiftunsignedRightShift(2, 1) // 1 unsignedRightShift(-2, 1) // 2147483647负数按无符号处理 unsignedRightShift(2, 32) // 2移位位数大于32时自动取模 一般业务代码很少直接调用它但理解它有助于你看懂 encodeBytes 里每 5 字节拼出 8 个字符的位运算。testVaildBase32如何快速校验Base32字符串合法性源码位置src/base32.cj#L218-L228public func testVaildBase32(str: String): Bool参数str— 待校验字符串返回值true表示每个字符都在ABCDEFGHIJKLMNOPQRSTUVWXYZ234567白名单内典型用途在调用解码前先做前置体检给用户更友好的错误提示用法示例摘自 base32_test.cj#L160-L172 的testVaildBase32testVaildBase32(A2B3C4D5) // true testVaildBase32(abcdefgh) // false小写不合法 testVaildBase32(ABCD*EFG) // false含非法字符 *Base32 字符表速记A-Z映射 0–252-7映射 26–31定义见 BASE32_DECODE_CHAR注意0、1、8、9 是刻意缺席的。解码原理中的 Rune 类型是什么decodeAsBytes内部把输入转成 Rune 数组遍历base32.cj#L34 的toRuneArray()。Rune 是仓颉中表示 Unicode 字符的类型覆盖\u{0000}–\u{D7FF}与\u{E000}–\u{10FFF}正因为按 Rune而非字节遍历中文等多字节字符才能被正确识别。如何编译运行与验证测试在项目根目录执行即可配置见 cjpm.toml当前要求 cjc 0.53.4cjpm build # 编译构建Win/Linux/Mac 通用想自己验证接口行为运行单元测试即可覆盖 ASCII、UTF-8、数组、异常全部用例cjpm test常见问题速答FAQQ1编码结果末尾的是错误吗不是。是 RFC 4648 的标准填充长度取决于输入字节数 mod 5解码时会被自动忽略。Q2为什么小写字母不能解码RFC 4648 标准字符表只含大写字母与2-7testVaildBase32 对abcdefgh会返回false请自行做大小写转换后再解码。Q3空字符串能编解码吗可以。encode()返回空字符串decodeAsBytes()返回空数组均不会抛异常。Q4解码到非法 UTF-8 会怎样decodeAsString会抛出OverflowException。若不确定输出是否为文本建议先用decodeAsBytes拿到字节再自行处理。总结hibase32-cj 以极小的 API 面提供了完整的 Base32 能力两个encode重载负责编码两个decode变体负责解码unsignedRightShift与testVaildBase32分别是位运算与校验的基石。配合 src/test/base32_test.cj 的完整用例你可以放心地在仓颉项目中用它处理 Token、验证码、文件编码等一切 Base32 场景。【免费下载链接】hibase32-cjBase32(RFC 4648)编码/解码库项目地址: https://gitcode.com/Cangjie-TPC/hibase32-cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
