RXTX收到错误

时间:2013-01-11 10:55:15

标签: java serial-port rxtx

我正在使用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"))));

charReader是打开的串口的InputStreamReader。我还检查了标记为(char)的行中的/*DOUBT*/的类型转换是否是罪魁祸首,但是没有强制转换的代码仍然存在不一致。

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

为什么我会出现这种不一致的任何想法?

1 个答案:

答案 0 :(得分:0)

这是一个字符编码问题:我认为你的java程序将端口输入解码为UTF-8。所以你得到?(ascii \ x1a)或unicode REPLACEMENT CHARACTER(65533)作为无效字符的占位符。

当您真正使用字节时,最好明确地使用字节,而不转换为字符。如果您必须将字节表示为字符,请使用unibyte encoding ISO-8859-1(其具有1:1映射以降低256个unicode字符)。