hibase32-cj:仓颉实现的Base32(RFC 4648)编码/解码工具,支持UTF-8

Base32(RFC 4648)编码/解码库

分支4Tags0
文件最后提交记录最后更新时间
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前

hibase32

1 简介

1.1 项目特点

  1. 本项目基于仓颉语言实现了符合RFC 4648标准的Base32编解码功能,并完整支持UTF-8编码。
  2. 项目代码移植自hi-base32/src/base32.js at master · emn178/hi-base32 (github.com)

1.2 开发规划

  1. 计划将当前使用仓颉自主实现的JavaScript库函数(如>>>运算符的仓颉版本、字符串长度计算等,均已通过单元测试验证),待仓颉官方提供对应库函数后进行迁移替换。
  2. 将持续修复项目中可能存在的潜在缺陷。

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(华为开发者大使)提供指导。

项目介绍

Base32(RFC 4648)编码/解码库

定制我的领域