从十六进制文字初始化字节数组

时间:2013-07-23 12:03:40

标签: java

我有以下问题:我将数组发送到串口,看起来像这样

 byte arr[] = new byte[]{0x18, 0x1B, 0x02, 0x05, 0xFF, 0x01, 0x10,
                         0x21,0x30, 0x00, 0x00, 0x6A, 0x28, 0x1B,0x03}

问题出现了 - 我有3个带R,G,B颜色的文本字段。我从它们得到的值为String.But我不能将它们转换为上面的格式0xHexValue并将它们放在字节数组中。我尝试了很多方法但没有任何成功。

编辑:我使用txtField.getText()从GUI的文本字段中获取值,之后在示例R 200,G 0,B 0转换为HEX C8 00 00没有问题,但我无法插入HEX进入我的字节数组,因为它仍然是字符串。当我尝试使用Byte.parseByte(s)将字符串转换为字节时,会出现一些负值......

编辑2 Byte.valueOf(myString)获取值200的异常

  

java.lang.NumberFormatException:值超出范围。值: “200”   基数:10

GUYS:我看到了你的帖子,我建议你专注于这个:如何使用这个字符串“C8”来适应 arr [ ] 格式正确 0xC8 ,当然字节不是字符串......

2 个答案:

答案 0 :(得分:2)

使用Byte.parseByte

Byte.parseByte(inputString,16);

16是十六进制基数


您也可以使用Byte.decode

Byte.decode(inputString);//inputString can be decimal, hexadecimal, and octal numbers

答案 1 :(得分:1)

试试这个:

    List<Byte> byteList = new ArrayList<>();
    String data = "0x18, 0x1B, 0x02, 0x05, 0xFF, 0x01, 0x10,0x21,0x30, 0x00, 0x00, 0x6A, 0x28, 0x1B,0x03";
    Pattern hexPattern = Pattern.compile("0x(..)");
    Matcher matcher = hexPattern.matcher(data);

    while(matcher.find()) {
        byteList.add((byte)Integer.parseInt(matcher.group(1), 16));
    }

    System.out.println(">>> " + byteList);

您可以通过实际的字节数组更改byteList。另外,我假设你以某种方式拥有你的字符串,但这个想法就是这个。