0

RXTX-2.1-7 を使用しており、Windows で COM ポートを読み取ろうとしています。PuTTY を使用して受信したデータと比較して、受信したデータにいくつかの不一致が見られます。

PuTTY で受信したデータ:

a5 5a 0b 05 10 00 00 00 00 27 d4 73 30 ae

しかし、RXTX を使用して受信したまったく同じデータ:

3f 5a 0b 0510 00 00 00 00 27 3f 73 30 3f

少なくとも より大きい受信バイトはすべてa0として読み取られるよう3fです。これが私が使用しているコードの関連部分です

                char[] buffer = new char[14];
                int i=0;
                Arrays.fill(buffer,(char)0);
                while (i<14)
                {                    
                    buffer[i++] = (char)charReader.read();   /*DOUBT*/
                }
                /*System.out.println(Arrays.toString(buffer));*/
                String bufferString = new String(buffer);
                System.out.println(String.format("%x ", new BigInteger(bufferString.getBytes("ISO-8859-1"))));

そしてcharReaderInputStreamReader開かれたシリアルポートのです。(char)また、マークされた行の型キャストが原因であるかどうかを確認しました/*DOUBT*/が、キャストのないコードでも一貫性がありません。

65533, 90, 11, 5, 16, 0, 0, 0, 0, 39, 65533, 115, 48, 65533

この不一致が発生する理由は何ですか?

4

1 に答える 1

0

これは文字エンコーディングの問題です。あなたの Java プログラムはポート入力を UTF-8 としてデコードしていると思います。したがって?、無効な文字のプレースホルダーとして (ascii \x1a) または unicode REPLACEMENT CHARACTER (65533) のいずれかを取得します。

実際にバイトを扱うときは、文字に変換せずに明示的にバイトを扱う方がよいでしょう。絶対にバイトを文字として表現する必要がある場合は、ユニバイト エンコーディングを使用しますISO-8859-1(下位 256 ユニコード文字に 1:1 でマッピングされます)。

于 2013-01-11T11:12:17.767 に答える