首页 > 解决方案 > 将字节字符串转换为字节数组

问题描述

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

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

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

本质上,我拆分为一个字符串数组,然后必须循环遍历字符串数组以使用 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

标签: javaandroidhexbyte

解决方案


循环非常复杂:

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

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


推荐阅读