1

次の問題があります。配列をシリアルポートに送信していますが、次のようになります

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

ここで問題が発生します。R、G、B の色の 3 つのテキスト フィールドがあります。それらから値を文字列として取得しますが、それらを上記の形式 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

男:私はあなたの投稿を見て、これに焦点を当てることをお勧めします:例でこの文字列「C8」を適切な形式0xC8でarr []に収まるようにする方法、そしてもちろん文字列ではなくバイトとして...

4

2 に答える 2

2

Byte.parseByteを使用する

Byte.parseByte(inputString,16);

16 は 16 進数の基数です。


Byte.decodeを使用することもできます

Byte.decode(inputString);//inputString can be decimal, hexadecimal, and octal numbers
于 2013-07-23T12:10:01.690 に答える
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実際のバイト配列で変更できます。また、特定の方法で文字列を持っていると想定していますが、アイデアはこれです。

于 2013-07-23T12:12:09.860 に答える