首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RXTX接收错误

RXTX接收错误
EN

Stack Overflow用户
提问于 2013-01-11 18:55:15
回答 1查看 566关注 0票数 0

我正在使用RXTX-2.1-7,并且正在尝试读取Windows中的COM端口。与使用PuTTY接收的数据相比,我发现接收到的数据中存在一些不一致之处。

在PuTTY中接收的数据:

代码语言:javascript
复制
a5 5a 0b 05 10 00 00 00 00 27 d4 73 30 ae

但是使用RXTX接收的数据是完全相同的:

代码语言:javascript
复制
3f 5a 0b 0510 00 00 00 00 27 3f 73 30 3f

似乎所有大于或等于a0的接收字节都被读取为3f。下面是我使用的代码的相关部分

代码语言:javascript
复制
                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。我还检查了标记为/*DOUBT*/的行中对(char)的类型转换是否是罪魁祸首,但没有类型转换的代码仍然不一致。

代码语言:javascript
复制
65533, 90, 11, 5, 16, 0, 0, 0, 0, 39, 65533, 115, 48, 65533

你知道为什么我会得到这种不一致的结果吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-11 19:12:18

这是一个字符编码问题:我认为您的java程序将port输入解码为UTF-8。因此,您将获得? (ASCIIx1a)或unicode替换字符(65533)作为无效字符的占位符。

当您真正使用字节时,最好显式地使用字节,而不是转换为字符。如果必须将字节表示为字符,请使用单字节编码ISO-8859-1 (它与较低的256个unicode字符有1:1的映射关系)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14276625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档