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

Android NFC开发:反转NTAG 5 boost标签UID后如何实现每两字符加冒号分隔

现有实现的核心问题
  • 分隔符插入逻辑错误:你手动拆分得到的hexChars数组存储的是单个十六进制位的字符,每个Char仅代表一位0-9/A-F的数值。当前代码直接对这个单字符数组调用joinToString(":"),会在每一位单字符的间隙都插入冒号,最终输出类似E:0:0:4:...的结果,完全不符合“每两个字符(单字节)插入分隔符”的要求。
  • 存在数组副作用风险:bytes.reverse()是会直接修改传入的原字节数组的就地操作,如果这个字节数组是Android NFC框架返回的内部缓存对象,后续其他业务逻辑读取该数组时,会因为数组被提前反转出现不可预期的显示错误。
修正后的代码实现
// 提前定义十六进制字符映射,避免方法内重复创建对象
private val hexArray = "0123456789ABCDEF".toCharArray()

fun byteArrayToHexInversed(bytes: ByteArray): String {
    // 生成反转后的新数组,不修改原传入的字节数组
    val reversedBytes = bytes.reversedArray()
    // 以单字节为单位转换为十六进制,直接拼接冒号分隔符
    return reversedBytes.joinToString(":") { byte ->
        val unsignedVal = byte.toInt() and 0xFF
        // 单字节对应两位十六进制字符,作为一个拼接单元
        "${hexArray[unsignedVal ushr 4]}${hexArray[unsignedVal and 0x0F]}"
    }
}
效果校验

用你提供的测试用例验证:

  1. 输入原始字节序列对应十六进制为00 08 39 CB 58 01 04 E0
  2. 数组反转后得到的字节顺序:E0 04 01 58 CB 39 08 00
  3. 单字节转十六进制后用冒号拼接,最终输出完全匹配预期:E0:04:01:58:CB:39:08:00

内容的提问来源于stack exchange,提问作者Martin Denion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 16:06:03