文章目录背景方法总览先搞懂为什么需要编码转换strToUint8Array / unit8ArrayToStr字符串与字节数组互转strToBase64 / base64ToStrBase64 编码互转strToBuffer / bufferToStr字符串与 ArrayBuffer 互转strToHex / hexToStr字符串与十六进制互转strToBytes / bytesToStr字节数组与字符串互转简化版编码转换方法对比速查写在最后背景近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓很多 HarmonyOS 初学者在遇到网络请求、文件读写、加密解密的时候总会碰到各种编码格式Base64、Uint8Array、ArrayBuffer、十六进制字符串……这些格式之间怎么互转StrUtil 提供了一套完整的工具方法这篇文章把它们全部说清楚。方法总览先搞懂为什么需要编码转换在程序里字符串在内存中实际上是一串字节。不同场景需要不同格式网络传输图片/文件通常需要 Base64 编码加密解密通常需要Uint8Array或ArrayBuffer十六进制调试查看字节内容时用 Hex 格式更直观底层 API 调用很多系统 API 需要Uint8Array或ArrayBuffer格式StrUtil 提供了字符串和这些格式之间的双向转换。strToUint8Array / unit8ArrayToStr字符串与字节数组互转Uint8Array是最基础的字节数组类型把字符串转成Uint8Array就是按照 UTF-8 编码把每个字符拆成字节。this.Btn(strToUint8Array(HarmonyOS),#148F77,(){constarrStrUtil.strToUint8Array(HarmonyOS);this.addLog(strToUint8Array(HarmonyOS) → Uint8Array[${arr.length}] [${Array.from(arr.slice(0,6)).join(,)}...]);})this.Btn(unit8ArrayToStr(Uint8Array),#148F77,(){constarrStrUtil.strToUint8Array(HarmonyOS);constsStrUtil.unit8ArrayToStr(arr);this.addLog(unit8ArrayToStr(arr) → ${s});})实际运行结果strToUint8Array(HarmonyOS)→Uint8Array[9] [72,97,114,109,111,110...]这里72就是字母H的 ASCII 码97是a以此类推。英文字符在 UTF-8 下每个字符一个字节所以 9 个字母 长度 9 的数组。还原回来unit8ArrayToStr(arr)→HarmonyOS使用场景需要把字符串传给底层加密 API、哈希计算时通常需要先转成Uint8Array。strToBase64 / base64ToStrBase64 编码互转Base64 是把二进制数据转成纯文本格式的编码方式常用于在文本协议比如 JSON里传输二进制数据或者在 URL 里传递特殊字符。this.Btn(strToBase64(HoUtils),#1F618D,(){constb64StrUtil.strToBase64(HoUtils);this.addLog(strToBase64(HoUtils) → ${b64});})this.Btn(base64ToStr(base64) 还原字符串,#1F618D,(){constb64StrUtil.strToBase64(HoUtils);constsStrUtil.base64ToStr(b64);this.addLog(base64ToStr(${b64}) → ${s});})实际运行结果strToBase64(HoUtils)→SG9VdGlscw这就是 Base64 编码后的样子base64ToStr(SG9VdGlscw)→HoUtils还原回来Base64 字符串的特征只包含字母、数字、、/末尾可能有号补位。使用场景把图片数据编码成 Base64 传给接口解码服务端返回的 Base64 字符串Token 里的 payload 部分JWT 的中间段就是 Base64 编码的strToBuffer / bufferToStr字符串与 ArrayBuffer 互转ArrayBuffer是另一种常见的字节容器和Uint8Array的区别是ArrayBuffer是原始内存块不直接支持索引访问Uint8Array是对ArrayBuffer的一个视图可以用arr[0]这样访问。this.Btn(strToBuffer(ArkTS),#196F3D,(){constbufStrUtil.strToBuffer(ArkTS);this.addLog(strToBuffer(ArkTS) → ArrayBuffer byteLength${buf.byteLength});})this.Btn(bufferToStr(ArrayBuffer),#196F3D,(){constbufStrUtil.strToBuffer(ArkTS);constsStrUtil.bufferToStr(buf);this.addLog(bufferToStr(buf) → ${s});})实际运行结果strToBuffer(ArkTS)→ArrayBuffer byteLength55 个字母对应 5 字节bufferToStr(buf)→ArkTS使用场景调用需要ArrayBuffer参数的底层 API比如文件写入、WebSocket 二进制消息传输。strToHex / hexToStr字符串与十六进制互转十六进制Hex格式在调试和密码学里很常见。每个字节用两个十六进制字符表示比如字节255→ff。this.Btn(strToHex(ff00ab) 16进制字符串→Uint8Array,#7E5109,(){constarrStrUtil.strToHex(ff00ab);this.addLog(strToHex(ff00ab) → [${Array.from(arr).join(,)}]);})this.Btn(hexToStr(Uint8Array) →16进制字符串,#7E5109,(){constarrnewUint8Array([255,0,171]);constsStrUtil.hexToStr(arr);this.addLog(hexToStr([255,0,171]) → ${s});})实际运行结果strToHex(ff00ab)→[255, 0, 171]把十六进制字符串解析成字节数组hexToStr([255, 0, 171])→ff00ab把字节数组转成十六进制字符串注意strToHex的参数是十六进制字符串比如ff00ab不是普通文本。函数名有点容易让人误解实际上做的是 “hex 字符串 → 字节数组”。使用场景展示哈希值、加密密钥通常以十六进制显示解析十六进制格式的颜色值或二进制协议数据strToBytes / bytesToStr字节数组与字符串互转简化版这对方法跟strToUint8Array / unit8ArrayToStr功能类似可以理解为另一个版本的字符串字节转换this.Btn(strToBytes(Hi),#512E5F,(){constarrStrUtil.strToBytes(Hi);this.addLog(strToBytes(Hi) → [${Array.from(arr).join(,)}]);})this.Btn(bytesToStr([72,105]),#512E5F,(){constsStrUtil.bytesToStr(newUint8Array([72,105]));this.addLog(bytesToStr([72,105]) → ${s});})实际运行结果strToBytes(Hi)→[72, 105]H72, i105bytesToStr([72, 105])→Hi编码转换方法对比速查方法输入输出典型场景strToUint8Array字符串Uint8Array加密/哈希计算unit8ArrayToStrUint8Array字符串解密结果转字符串strToBase64字符串Base64 字符串网络传输、JWTbase64ToStrBase64 字符串字符串解码 Base64strToBuffer字符串ArrayBuffer底层 API 调用bufferToStrArrayBuffer字符串接收字节数据后转文本strToHexHex 字符串Uint8Array解析十六进制数据hexToStrUint8ArrayHex 字符串展示字节内容strToBytes字符串Uint8Array通用字节操作bytesToStrUint8Array字符串字节转文本写在最后编码转换虽然听起来很底层但在实际开发里真的高频出现。接口返回 Base64 图片、加密 token、文件哈希……这些场景都需要用到这些方法。把这张对照表收藏起来遇到编码问题直接查。下一篇聊 StrUtil 的getErrnoToString——通过错误码快速定位系统错误信息。
HarmonyOS StrUtil 编码转换全指南:Uint8Array、Base64、Hex、Buffer 互转实战
文章目录背景方法总览先搞懂为什么需要编码转换strToUint8Array / unit8ArrayToStr字符串与字节数组互转strToBase64 / base64ToStrBase64 编码互转strToBuffer / bufferToStr字符串与 ArrayBuffer 互转strToHex / hexToStr字符串与十六进制互转strToBytes / bytesToStr字节数组与字符串互转简化版编码转换方法对比速查写在最后背景近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓很多 HarmonyOS 初学者在遇到网络请求、文件读写、加密解密的时候总会碰到各种编码格式Base64、Uint8Array、ArrayBuffer、十六进制字符串……这些格式之间怎么互转StrUtil 提供了一套完整的工具方法这篇文章把它们全部说清楚。方法总览先搞懂为什么需要编码转换在程序里字符串在内存中实际上是一串字节。不同场景需要不同格式网络传输图片/文件通常需要 Base64 编码加密解密通常需要Uint8Array或ArrayBuffer十六进制调试查看字节内容时用 Hex 格式更直观底层 API 调用很多系统 API 需要Uint8Array或ArrayBuffer格式StrUtil 提供了字符串和这些格式之间的双向转换。strToUint8Array / unit8ArrayToStr字符串与字节数组互转Uint8Array是最基础的字节数组类型把字符串转成Uint8Array就是按照 UTF-8 编码把每个字符拆成字节。this.Btn(strToUint8Array(HarmonyOS),#148F77,(){constarrStrUtil.strToUint8Array(HarmonyOS);this.addLog(strToUint8Array(HarmonyOS) → Uint8Array[${arr.length}] [${Array.from(arr.slice(0,6)).join(,)}...]);})this.Btn(unit8ArrayToStr(Uint8Array),#148F77,(){constarrStrUtil.strToUint8Array(HarmonyOS);constsStrUtil.unit8ArrayToStr(arr);this.addLog(unit8ArrayToStr(arr) → ${s});})实际运行结果strToUint8Array(HarmonyOS)→Uint8Array[9] [72,97,114,109,111,110...]这里72就是字母H的 ASCII 码97是a以此类推。英文字符在 UTF-8 下每个字符一个字节所以 9 个字母 长度 9 的数组。还原回来unit8ArrayToStr(arr)→HarmonyOS使用场景需要把字符串传给底层加密 API、哈希计算时通常需要先转成Uint8Array。strToBase64 / base64ToStrBase64 编码互转Base64 是把二进制数据转成纯文本格式的编码方式常用于在文本协议比如 JSON里传输二进制数据或者在 URL 里传递特殊字符。this.Btn(strToBase64(HoUtils),#1F618D,(){constb64StrUtil.strToBase64(HoUtils);this.addLog(strToBase64(HoUtils) → ${b64});})this.Btn(base64ToStr(base64) 还原字符串,#1F618D,(){constb64StrUtil.strToBase64(HoUtils);constsStrUtil.base64ToStr(b64);this.addLog(base64ToStr(${b64}) → ${s});})实际运行结果strToBase64(HoUtils)→SG9VdGlscw这就是 Base64 编码后的样子base64ToStr(SG9VdGlscw)→HoUtils还原回来Base64 字符串的特征只包含字母、数字、、/末尾可能有号补位。使用场景把图片数据编码成 Base64 传给接口解码服务端返回的 Base64 字符串Token 里的 payload 部分JWT 的中间段就是 Base64 编码的strToBuffer / bufferToStr字符串与 ArrayBuffer 互转ArrayBuffer是另一种常见的字节容器和Uint8Array的区别是ArrayBuffer是原始内存块不直接支持索引访问Uint8Array是对ArrayBuffer的一个视图可以用arr[0]这样访问。this.Btn(strToBuffer(ArkTS),#196F3D,(){constbufStrUtil.strToBuffer(ArkTS);this.addLog(strToBuffer(ArkTS) → ArrayBuffer byteLength${buf.byteLength});})this.Btn(bufferToStr(ArrayBuffer),#196F3D,(){constbufStrUtil.strToBuffer(ArkTS);constsStrUtil.bufferToStr(buf);this.addLog(bufferToStr(buf) → ${s});})实际运行结果strToBuffer(ArkTS)→ArrayBuffer byteLength55 个字母对应 5 字节bufferToStr(buf)→ArkTS使用场景调用需要ArrayBuffer参数的底层 API比如文件写入、WebSocket 二进制消息传输。strToHex / hexToStr字符串与十六进制互转十六进制Hex格式在调试和密码学里很常见。每个字节用两个十六进制字符表示比如字节255→ff。this.Btn(strToHex(ff00ab) 16进制字符串→Uint8Array,#7E5109,(){constarrStrUtil.strToHex(ff00ab);this.addLog(strToHex(ff00ab) → [${Array.from(arr).join(,)}]);})this.Btn(hexToStr(Uint8Array) →16进制字符串,#7E5109,(){constarrnewUint8Array([255,0,171]);constsStrUtil.hexToStr(arr);this.addLog(hexToStr([255,0,171]) → ${s});})实际运行结果strToHex(ff00ab)→[255, 0, 171]把十六进制字符串解析成字节数组hexToStr([255, 0, 171])→ff00ab把字节数组转成十六进制字符串注意strToHex的参数是十六进制字符串比如ff00ab不是普通文本。函数名有点容易让人误解实际上做的是 “hex 字符串 → 字节数组”。使用场景展示哈希值、加密密钥通常以十六进制显示解析十六进制格式的颜色值或二进制协议数据strToBytes / bytesToStr字节数组与字符串互转简化版这对方法跟strToUint8Array / unit8ArrayToStr功能类似可以理解为另一个版本的字符串字节转换this.Btn(strToBytes(Hi),#512E5F,(){constarrStrUtil.strToBytes(Hi);this.addLog(strToBytes(Hi) → [${Array.from(arr).join(,)}]);})this.Btn(bytesToStr([72,105]),#512E5F,(){constsStrUtil.bytesToStr(newUint8Array([72,105]));this.addLog(bytesToStr([72,105]) → ${s});})实际运行结果strToBytes(Hi)→[72, 105]H72, i105bytesToStr([72, 105])→Hi编码转换方法对比速查方法输入输出典型场景strToUint8Array字符串Uint8Array加密/哈希计算unit8ArrayToStrUint8Array字符串解密结果转字符串strToBase64字符串Base64 字符串网络传输、JWTbase64ToStrBase64 字符串字符串解码 Base64strToBuffer字符串ArrayBuffer底层 API 调用bufferToStrArrayBuffer字符串接收字节数据后转文本strToHexHex 字符串Uint8Array解析十六进制数据hexToStrUint8ArrayHex 字符串展示字节内容strToBytes字符串Uint8Array通用字节操作bytesToStrUint8Array字符串字节转文本写在最后编码转换虽然听起来很底层但在实际开发里真的高频出现。接口返回 Base64 图片、加密 token、文件哈希……这些场景都需要用到这些方法。把这张对照表收藏起来遇到编码问题直接查。下一篇聊 StrUtil 的getErrnoToString——通过错误码快速定位系统错误信息。