【问题标题】:Initializing a byte array from hex literals从十六进制文字初始化字节数组
【发布时间】:2013-07-22 11:52:34
【问题描述】:

我有以下问题:我正在向串口发送一个数组,它看起来像这样

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

问题来了 - 我有 3 个带有 R 、 G 、 B 颜色的文本字段。我从它们那里得到值作为字符串。但我无法将它们转换为上述格式 0xHexValue 并将它们放入字节数组中。我尝试了很多方法,但都没有成功。

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

EDIT 2 Byte.valueOf(myString) 在值 200 上获得异常

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

GUYS:我看到你的帖子,我建议把重点放在这个:How to make in example this String "C8" to fit in the arr[ ] 具有正确的格式 0xC8 并且当然是字节而不是字符串...

【问题讨论】:

  • 字符串中的值是如何存储的? “0x18”、“18”、...?
  • 你能告诉我们你是怎么尝试的吗?
  • Byte.parseByte(string,radix);
  • (请注意,在使用 parseByte 之前,您需要先以某种方式去掉“0x”。)
  • 可能看到thisthis

标签: java


【解决方案1】:

使用Byte.parseByte

Byte.parseByte(inputString,16);

16 是十六进制基数


你也可以使用Byte.decode

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

【讨论】:

  • 你认为input 在 OP 的情况下是什么?
  • 请提及String的类型,即字符串的内容。
  • @TheNewIdiot 它可以是任何“0x”、“0X”、“#”或前导零
  • 不适合我,请将其添加到答案中。
【解决方案2】:

试试这个:

    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。另外,我假设您以某种方式拥有您的字符串,但想法是这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多