You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:10:49