Android 中 DatatypeConverter.printHexBinary(byte[] array) 和 DatatypeConverter.par

arraysAndroid

1个回答

写回答

WyaqIan

2025-06-14 19:40

+ 关注

Android
Android

# 替代方案:Android 中 DatatypeConverter.printHexBinary 和 DatatypeConverter.parseHexBinary 的实现

Android开发中,我们经常会遇到需要将字节数组转换为十六进制字符串或将十六进制字符串转换为字节数组的情况。以往,我们通常使用DatatypeConverter.printHexBinary(byte[] array)DatatypeConverter.parseHexBinary(String str)这两个方法来完成这样的转换。然而,自从Android API Level 26以后,这两个方法被标记为已弃用,因此我们需要寻找替代方案。

## 替代方案一:使用 Kotlin 的扩展函数

Kotlin 提供了强大的扩展函数功能,我们可以通过扩展函数轻松地实现字节数组到十六进制字符串和十六进制字符串到字节数组的转换。

kotlin

fun ByteArray.toHex(): String {

val result = StringBuilder()

for (byte in this) {

result.append(String.format("X", byte))

}

return result.toString()

}

fun String.hexToByteArray(): ByteArray {

val result = ByteArray(length / 2)

for (i in 0 until length step 2) {

result[i / 2] = ((Character.digit(this[i], 16) shl 4) + Character.digit(this[i + 1], 16)).toByte()

}

return result

}

这两个扩展函数使得在Kotlin中进行字节数组和十六进制字符串的转换变得非常简单。以下是一个使用示例:

kotlin

val byteArray = byteArrayOf(0x48, 0x65, 0x6C, 0x6C, 0x6F)

val hexString = byteArray.toHex()

println("字节数组转十六进制字符串:$hexString")

val convertedArray = hexString.hexToByteArray()

println("十六进制字符串转字节数组:${convertedArray.joinToString(",")}")

## 替代方案二:使用 Java 的 BigInteger 类

Java中,我们可以使用BigInteger类来完成字节数组到十六进制字符串和十六进制字符串到字节数组的转换。

Java

import Java.math.BigInteger;

public class HexConverter {

public static String bytesToHex(byte[] bytes) {

BigInteger bigInt = new BigInteger(1, bytes);

return bigInt.toString(16);

}

public static byte[] hexToBytes(String hex) {

BigInteger bigInt = new BigInteger(hex, 16);

return bigInt.toByteArray();

}

public static void mAIn(String[] args) {

byte[] byteArray = {0x48, 0x65, 0x6C, 0x6C, 0x6F};

String hexString = bytesToHex(byteArray);

System.out.println("字节数组转十六进制字符串:" + hexString);

byte[] convertedArray = hexToBytes(hexString);

System.out.println("十六进制字符串转字节数组:" + Arrays.toString(convertedArray));

}

}

这里,BigInteger的构造函数允许我们传入字节数组或十六进制字符串,从而完成转换。

Android开发中,替代DatatypeConverter.printHexBinaryDatatypeConverter.parseHexBinary的方法有很多。使用Kotlin的扩展函数或Java的BigInteger类是两种简洁而强大的选择。通过这些替代方案,我们可以轻松地在应用程序中进行字节数组和十六进制字符串之间的转换,同时适配了最新的API标准。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号