java 串口通信 数据格式问题

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

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


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

流处理的话,java中的字符使用Unicode码,占4个字节,而C++中的字符是ASCII码,占1个字节,这样该怎么处理?
...全文
12108 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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中不是用的什么什么编码的话应该有其他问题

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧