将字节字符串转换为字节数组

Converting a String of Bytes to a byte array

我有一个txt文件,它是由逗号分隔的十六进制字节组成的字符串,例如:

0x01,0x02,0x03,0x04,0xA1,

我想用逗号轻松地分割这个字符串,然后将每个 Hex 转换为一个字节,但我能让这个工作的唯一方法似乎是一个荒谬的额外工作量。

基本上我要拆分成一个字符串数组,然后必须循环遍历字符串数组以使用 BigInteger 将每个单独的“字符串”转换为字节数组,然后循环遍历该字节数组以将其转换为单个字节然后将其添加到不同的字节数组。哦,我也必须从每个“字符串”中手动删除 0x。

String Data = "0x01,0x02,0x03,0x04,0xA1,";
String[] DataSplit = Data.split(",");
int DataLength = DataSplit.length;
byte[] byteArray = new byte[DataLength];

for(int i = 0; i < DataLength; i++) {

    String dataSingle = DataSplit[i].charAt(2) + "" + DataSplit[i].charAt(3); // remove 0x

    byte[] bytes = new BigInteger((dataSingle), 16).toByteArray();
    byte singleByte = 0;
    for (byte aByte : bytes) {
        singleByte += (byte) aByte;
    }

    byteArray[i] = (byte) singleByte;

}

这段代码有效,但对于这样一个基本过程来说,它的代码量实在是太愚蠢了。这是在 Android Studio 中为一个 Android 应用程序完成的,但这就是全部 Java

循环过于复杂:

for(int i = 0; i < DataLength; i++) {
  byteArray[i] = (byte) Integer.parseInt(DataSplit[i].substring(2), 16);
}

(您需要使用 Integer.parseInt 而不是 Byte.parseByte 才能处理大于 0x7f 的字节)。