java 串口通信乱码 数据格式
java串口通信接收到乱码,怀疑是数据格式的问题,所以想了解一下。是用C++语言对单片机编程,使单片机传输unsighedchar型(占1个字节)数据。java使用Inp...
java 串口通信接收到乱码,怀疑是数据格式的问题,所以想了解一下。
是用C++语言对单片机编程,使单片机传输 unsighed char型(占1个字节)数据。java使用InputStream 类接收数据。
据我了解,inputstream处理的是字节流,那么是否不能接受单片机传来的char型数据,而要用字符流来处理?如果要用字符
流处理的话,java中的字符使用Unicode码,占4个字节,而C++中的字符是ASCII码,占1个字节,这样该怎么处理? 展开
是用C++语言对单片机编程,使单片机传输 unsighed char型(占1个字节)数据。java使用InputStream 类接收数据。
据我了解,inputstream处理的是字节流,那么是否不能接受单片机传来的char型数据,而要用字符流来处理?如果要用字符
流处理的话,java中的字符使用Unicode码,占4个字节,而C++中的字符是ASCII码,占1个字节,这样该怎么处理? 展开
4个回答
展开全部
用byte[]数组接收,然后设置编码类型,转换为String就可以了。
new String(bytearray,"US-ASCII');
new String(bytearray,"US-ASCII');
追问
是这个意思么?
InputStream is;
is=serialport.getInputStream();
byte[] readbuffer=new byte[20];
int num=is.read(readbuffer);
String str=new String (readbuffer,"US-ASCII");
追答
很久没看百度知道了,大体是这样的,不过像你这样写的话最好用
String(byte[] bytes, int offset, int length, String charsetName) 这个构造方法,指定buffer里的有效数据长度。
其实自己动手试一下就知道对不对了,实践是检验真理的唯一标准嘛。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得你的问题有两个可能:
1,没有正确识别数据包的格式,比如消息头处理不正确
2,消息内部含有非ASC编码的字符串
详情需要看代码能解决。可以M我
1,没有正确识别数据包的格式,比如消息头处理不正确
2,消息内部含有非ASC编码的字符串
详情需要看代码能解决。可以M我
追问
接收数据部分代码如下:
try {
/* 从线路上读取数据流 */
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
} //while end
str=new String(readBuffer,"US-ASCII");
/*接收到的数据存放到文本区中*/
in_message.append(str+"/n");
}
catch (IOException e) { }
} //serialEvent() end
} //类R_Frame end
请问哪里有问题??
追答
问题在于没有判断流当中消息的开头位置,随意读取,无法解码
建议你先制订消息格式,然后在发送端和接收端做对应的编码解码工作
比如我们约定,消息头是0x02,消息尾是0x03,那么你要确保消息中不会出现这两个字节的内容,仅仅把他们作为消息开始和结束标志,读取的时候进行消息头查找
逐字节读取,判断是否0x02,如果是,就继续读,一直读到0x03,然后把整个字节数组进行解码
解码的方式要和发送的编码方式相对应
在你的代码中,使用US-ASCII字符集解码,如果发送包含中文或者其他特殊字符,必然要产生乱码
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好牛跟好牛.中一下必死。拳打脚踢.连击七十八击。画面出现PERFICT表集!
阿四大四大四大打算
阿四大四大四大打算
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试下java.io.DataInputStream中的readUnsignedByte方法.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询