对于 bytes 数组,下面展示一个 16 进制转 10 进制
package com.lujianfei.phoneinfo
import org.junit.Test
import java.lang.StringBuilder
class ByteArrayTest {
@Test
fun test() {
val bytes = byteArrayOf(0x12, 0x13, 0xff.toByte())
print("16进制:")
bytes.forEach {
print((it.toInt() and 0xff).toString(16))
}
println()
print("10进制:")
var sum = 0
val hexString = getHexString(bytes)
hexString.forEach {
sum = sum * 16 + charToDecimal(it)
}
println(sum)
}
private fun getHexString(bytes: ByteArray): String {
val sb = StringBuilder()
bytes.forEach {
sb.append((it.toInt() and 0xff).toString(16))
}
return sb.toString()
}
private fun charToDecimal(c: Char): Int {
return when (c) {
in 'A'..'F' -> {
10 + c.toInt() - 'A'.toInt()
}
in 'a'..'f' -> {
10 + c.toInt() - 'a'.toInt()
}
else -> c - '0'
}
}
}
输出结果
16进制:1213ff
10进制:1184767