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),仅供参考
企业数字化 ERP 产品动态
相关推荐
vk1633-display 完全解析:源师兄板 VK16K33 四位数码管扩展是什么? vk1633-display 完全解析:源师兄板 VK16K33 四位数码管扩展是什么? 【免费下载链接】CupCode_VK16k33数码管模块 源师兄扩展项目: VK16k33 | 由源师兄组织创建 项目地址: https://gitcode.com/yuanshixiong/vk1633-display
vk1633-display 是一款… · 2026/9/25 2:36:32
treg广告API实战:Meta Ads、Google Ads、TikTok Ads按次调用的秘密 treg广告API实战:Meta Ads、Google Ads、TikTok Ads按次调用的秘密 【免费下载链接】treg OpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn 项目地址: https://gitcode.com/GitHub_Trending/treg/treg
treg 是一个"面… · 2026/9/25 2:36:26
H5跳转微信小程序的三大方案:Scheme、URL Link与开放标签实战指南 1. 项目概述:为什么H5跳转微信指定页面这件事,比你想象中更难也更重要“外部H5跳转微信指定页面”——这短短十个字,背后是无数前端工程师、小程序开发者、运营同学在深夜改需求时咬牙切齿的战场。我做过6个年均DAU超500万的微信生态项目&… · 2026/9/25 3:07:15
Xray 共享工作区与基于能力的 RPC 系统设计:从 2018 年 4 月 9 日周报看协作编辑的底层实现 开发工具 【免费下载链接】xray An experimental next-generation Electron-based text editor 项目地址: https://gitcode.com/gh_mirrors/xray/xray 点击查看 免费下载 Xray 在 2018 年 4 月 9 日的更新周报中记录了共享工作区(Shared Workspaces&… · 2026/9/25 3:07:03
零广告靠社媒:独立站卖数字材料月入数万美元的运营拆解 1. 项目拆解:卖“材料”的独立站到底是一门什么生意1.1 “材料”是什么,为什么能卖出高溢价先说说“材料”这个引号。很多人看到“卖材料”第一反应是卖钢筋水泥,或者是卖布料皮革,但做独立站的人听到这个词,脑子里想的… · 2026/9/25 3:07:03
HowToGraphQL React+Relay 教程实践:用 PaginationContainer 实现游标分页 【免费下载链接】howtographql The Fullstack Tutorial for GraphQL 项目地址: https://gitcode.com/gh_mirrors/ho/howtographql 点击查看 免费下载 本文基于 HowToGraphQL(The Fullstack Tutorial for GraphQL)仓库中 React Relay 教程的… · 2026/9/25 3:07:03
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37