Base32(RFC 4648)编码/解码库
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 |
以下内容由 AI 翻译,如有问题请 点此提交 issue 反馈
1 简介
1.1 项目特点
- 本项目基于仓颉语言实现了符合RFC 4648标准的Base32编解码功能,并完整支持UTF-8编码。
- 项目代码移植自hi-base32/src/base32.js at master · emn178/hi-base32 (github.com)
1.2 开发规划
- 计划将当前使用仓颉自主实现的JavaScript库函数(如>>>运算符的仓颉版本、字符串长度计算等,均已通过单元测试验证),待仓颉官方提供对应库函数后进行迁移替换。
- 将持续修复项目中可能存在的潜在缺陷。
2 架构设计
2.1 项目结构
.
├── README.md
├── LICENSE
├── cjpm.toml
|
└── src
└── test # 测试代码
├── base32_test.cj
└── base32.cj # 核心代码
2.2 Interface Description
| Name | Purpose |
|---|---|
public func decodeAsBytes(base32Str: String): Array<UInt8> |
Decodes a Base32-encoded string into a byte array |
private func encodeBytes(bytes: Array<UInt8>): String |
Encodes a byte array Array<UInt8> into a hexadecimal string |
public func unsignedRightShift(value:Int64,shift:Int64):Int64 |
Unsigned right shift >>> |
3 Usage Guide
3.1 Compilation and Build (Win/Linux/Mac)
cjpm build
3.2 功能示例
3.2.1 执行编码
encode("Hello") //编码结果为"JBSWY3DP"
encode("Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.",true) //编码结果为"JVQW4IDJOMQGI2LTORUW4Z3VNFZWQZLEFQQG433UEBXW43DZEBRHSIDINFZSA4TFMFZW63RMEBRHK5BAMJ4SA5DINFZSA43JNZTXK3DBOIQHAYLTONUW63RAMZZG63JAN52GQZLSEBQW42LNMFWHGLBAO5UGSY3IEBUXGIDBEBWHK43UEBXWMIDUNBSSA3LJNZSCYIDUNBQXIIDCPEQGCIDQMVZHGZLWMVZGC3TDMUQG6ZRAMRSWY2LHNB2CA2LOEB2GQZJAMNXW45DJNZ2WKZBAMFXGIIDJNZSGKZTBORUWOYLCNRSSAZ3FNZSXEYLUNFXW4IDPMYQGW3TPO5WGKZDHMUWCAZLYMNSWKZDTEB2GQZJAONUG64TUEB3GK2DFNVSW4Y3FEBXWMIDBNZ4SAY3BOJXGC3BAOBWGKYLTOVZGKLQ="
encode("Base64 is a group of similar binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation.") //编码结果为"IJQXGZJWGQQGS4ZAMEQGO4TPOVYCA33GEBZWS3LJNRQXEIDCNFXGC4TZFV2G6LLUMV4HIIDFNZRW6ZDJNZTSA43DNBSW2ZLTEB2GQYLUEBZGK4DSMVZWK3TUEBRGS3TBOJ4SAZDBORQSA2LOEBQW4ICBKNBUSSJAON2HE2LOM4QGM33SNVQXIIDCPEQHI4TBNZZWYYLUNFXGOIDJOQQGS3TUN4QGCIDSMFSGS6BNGY2CA4TFOBZGK43FNZ2GC5DJN5XC4==="
3.2.2 Encoding with utf8Str
encode("中文") //编码结果为4S4K3ZUWQ4======
encode("中文12") //编码结果为4S4K3ZUWQ4YTE===
encode("aécio") //编码结果为MHB2SY3JN4======
encode("𠜎") //编码结果为6CQJZDQ=
encode("Base64是一種基於64個可列印字元來表示二進制資料的表示方法") //编码结果为IJQXGZJWGTTJRL7EXCAOPKFO4WP3VZUWXQ3DJZMARPSY7L7FRCL6LDNQ4WWZPZMFQPSL5BXIUGUOPJF24S5IZ2MAWLSYRNXIWOD6NFUZ46NIJ2FBVDT2JOXGS246NM4V
3.2.3 Encoding Non-String Data
encode([72]) //编码结果为JA======
encode([72, 101, 108] //编码结果为JBSWY===
encode([72, 101, 108, 108]) //编码结果为JBSWY3A=
encode([72, 101, 108, 108, 111]) //编码结果为JBSWY3DP
3.2.3 使用Uint8Array进行编码
var arr=Array<UInt8>([72, 101, 108, 108, 111])
encode(arr) //编码结果为 JBSWY3DP
3.2.4 使用ArrayBuffer进行编码
var buffer:Array<Byte>=[0]
encode(buffer) //编码结果为AA======
3.2.5 Decoding the base32Str
decode("JBSQ====") //He
3.2.6 Decoding base32Utf8Strs
decode("4S4K3ZUWQ4======") //中文
decode("4S4K3ZUWQ4YTE===") //中文12
decode("MHB2SY3JN4======") //aécio
decode("IJQXGZJWGTTJRL7EXCAOPKFO4WP3VZUWXQ3DJZMARPSY7L7FRCL6LDNQ4WWZPZMFQPSL5BXIUGUOPJF24S5IZ2MAWLSYRNXIWOD6NFUZ46NIJ2FBVDT2JOXGS246NM4V") //Base64是一種基於64個可列印字元來表示二進制資料的表示方法
4 已知问题
4.1 仓颉语言缺少常用运算符与库函数
JavaScript 中 >>> 的仓颉实现函数:
(function) func unsignedRightShift(value: Int64, shift: Int64): Int64
JavaScript 中 !/^[A-Z2-7=]+$/.test(base32Str) 的仓颉实现函数:
(function) func testVaildBase32(str: String): Bool
5 参与贡献
本项目由 SIGCANGJIE / 仓颉兴趣组 开发维护。如需技术支援或反馈建议,请提交 Issue 讨论。
项目采用 MIT 开源协议,欢迎提交 Pull Request 或参与任何形式的贡献。
项目核心贡献者:(Moem(@Moem) - GitCode)
本项目由 @zhangyin_gitcode(华为开发者大使)提供指导。
