Android Room如何将ByteArray存储为Blob?及跨平台转回方法
Room存储ByteArray的格式转换及跨平台还原方法
一、Room将ByteArray转换为十六进制字符串的原理
你在Android Studio数据库检查器里看到的5994471ABB01112AFCC18159F6CC74B4,本质是SQLite BLOB类型数据的可视化形式——Room本身没有做额外转换,是Android Studio的工具为了让二进制数据更易读,把存储的字节数组转换成了无分隔符的大写十六进制字符串。
具体转换逻辑很简单:遍历字节数组中的每个字节,将其转为两位十六进制字符(不足两位时补前导0),再把所有字符拼接成连续字符串,字母统一用大写。比如字节0x59对应"59",字节0xAB对应"AB",依次拼接就得到了你看到的结果。
二、跨平台将十六进制字符串转回ByteArray的方法
以下是几种常用语言的实现:
Kotlin/Java
// Kotlin 实现 fun hexStringToByteArray(hex: String): ByteArray { require(hex.length % 2 == 0) { "十六进制字符串长度必须为偶数" } return hex.chunked(2) .map { it.toInt(16).toByte() } .toByteArray() } // 使用示例 val hexStr = "5994471ABB01112AFCC18159F6CC74B4" val byteArray = hexStringToByteArray(hexStr)
Python
def hex_str_to_bytearray(hex_str): # 兼容小写输入,先转大写 hex_str = hex_str.upper() return bytearray.fromhex(hex_str) # 使用示例 hex_str = "5994471ABB01112AFCC18159F6CC74B4" byte_arr = hex_str_to_bytearray(hex_str)
JavaScript
function hexToByteArray(hexStr) { // 移除空格并统一转大写 hexStr = hexStr.replace(/\s/g, '').toUpperCase(); if (hexStr.length % 2 !== 0) { throw new Error('十六进制字符串长度必须为偶数'); } const byteArray = new Uint8Array(hexStr.length / 2); for (let i = 0; i < hexStr.length; i += 2) { byteArray[i / 2] = parseInt(hexStr.substring(i, i + 2), 16); } return byteArray; } // 使用示例 const hexStr = "5994471ABB01112AFCC18159F6CC74B4"; const byteArray = hexToByteArray(hexStr);
内容的提问来源于stack exchange,提问作者Ali Zarei
相关产品推荐
相关产品推荐

