java 串口通信 数据格式问题

lmya_go 2012-07-30 10:27:39
java 串口通信接收到乱码,怀疑是数据格式的问题,所以想了解一下。

是用C++语言对单片机编程,使单片机传输 unsighed char型(占1个字节)数据。java使用InputStream 类接收数据。


据我了解,inputstream处理的是字节流,那么是否不能接受单片机传来的char型数据,而要用字符流来处理?如果要用字符

流处理的话,java中的字符使用Unicode码,占4个字节,而C++中的字符是ASCII码,占1个字节,这样该怎么处理?
...全文
12051 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Frog1228 2012-07-31
你做串口通信也要按协议的吧,MODBUS?MODBUS分RTU格式和ASCII格式,一般都是用RTU格式(如果我没记错的话)如果下位机传过来的是32这个数据,那么它就是以32传递到上位机,而不是把32拆成3的ASCII码和2的ASCII码传递到上位机,我觉得用InputStream流应该没有问题,只是在上位机取和解码的时候要知道协议。PS:为什么不用数组去取呢?
回复
lbing7 2012-07-31
可不可以看看InputStream流里的一个UNICODE字符是包含了四个字节的串口数据还是一个字节串口数据,其它的数据为空?
回复
Frog1228 2012-07-31
sbyte数组是8位有符号整型数组。
回复
Frog1228 2012-07-31
[Quote=引用 4 楼 的回复:]
使用的是RS232。有关接收数据的代码如下,请帮我看一下是不是有问题:

InputStream is;
byte[] readbuffer=new byte[20];
is=serialPort.getInputStream();
int num=is.read(readbuffer);
String str=new String(readbuffer);
[/Quote]
你不能用byte数组去构造String的吧,byte是无符号一个字节,可以和单片机的 unsighed char型配对,但是它不是Unicode字符,所以不能由它去构造String,在C#中char是Unicode字符,可以用char数组构造String,可以有sbyte数组,指定编码格式构造String,JAVA中不知道能不能这样。你先加个断点,看接收到的readbuffer是不是和下位单片机传过来的内容一样,判断接收有没有错误。
回复
lmya_go 2012-07-31
[Quote=引用 2 楼 的回复:]
可不可以看看InputStream流里的一个UNICODE字符是包含了四个字节的串口数据还是一个字节串口数据,其它的数据为空?
[/Quote]

java是用不同的类处理字节流和字符流,我没办法确定的是这样属于什么数据类型,该用哪种类处理
回复
lmya_go 2012-07-31
字节和char是一回事的话,那用字节流来处理就没问题了?。。

我再找找看其他问题
回复
lmya_go 2012-07-31
使用的是RS232。有关接收数据的代码如下,请帮我看一下是不是有问题:

InputStream is;
byte[] readbuffer=new byte[20];
is=serialPort.getInputStream();
int num=is.read(readbuffer);
String str=new String(readbuffer);
回复
dceacho 2012-07-31
inputstream处理的是字节流
字节和char是一会事
如果java中不是用的什么什么编码的话应该有其他问题
回复
相关推荐
发帖
单片机/工控
创建于2007-09-28

2.6w+

社区成员

硬件/嵌入开发 单片机/工控
申请成为版主
帖子事件
创建了帖子
2012-07-30 10:27
社区公告
暂无公告