十六进制到字节[]的Java字符串

时间:2018-01-02 13:24:27

标签: java byte

需要转换字符串,如:

String test = "0xF0 0x9F 0x87 0xB7 0xF0 0x9F 0x87 0xBA";
String [] GetByte = test.split(" ");

到字节数组,如:

byte [] test_arr = new byte [GetByte.length];
        test [0] = (byte) 0xF0;
        test [1] = (byte) 0x9F;
        test [2] = (byte) 0x87;
        test [3] = (byte) 0xB7;
        test [4] = (byte) 0xF0;
        test [5] = (byte) 0x9F;
        test [6] = (byte) 0x87;
        test [7] = (byte) 0xBA;

任何人都可以提供帮助吗?谢谢!

3 个答案:

答案 0 :(得分:3)

String[] words = test.split(" ");
byte[] bytes = new byte[words.length];
for (int i = 0; i < words.length; ++i) {
    //bytes[i] = Byte.decode(words[i]);
    bytes[i] = Integer.decode(words[i]).byteValue();
}

方法decode也可以翻译其他基础。

不幸的是byte已签名,因此0xF0溢出,Byte.decode无法使用。

答案 1 :(得分:1)

Integer[] numbers =
    //splitting the string into an array and converting it to a stream
    Arrays.stream(test.split(" "))
        //removing '0x' from each hex string and parsing an integer value from it
        .map(s -> Integer.parseInt(s.replace("0x", ""), 16))
        //collecting everything to an integer array
        .toArray(Integer[]::new);

我已经添加了一些有关此代码如何工作的评论。

我使用整数而不是字节的原因是给定字符串中存在一些溢出字节的十六进制值。

答案 2 :(得分:0)

如果您100%确定每个号码都以0x开头,那么您可以将其解包,然后使用Integer.parseInt(substringed, 16)进行解析。