java串口通信中怎样以十六进制数发送

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java串口通信中怎样以十六进制数发送相关的知识,希望对你有一定的参考价值。

参考技术A 做串口通讯的时候基本都是通过io流读取、输出。那么在java开发中发送数据的时候使用OutputStream,而其write()的参数是字节数组、int整形。如果使用字节数组发送的时候,通常可以直接写成out.write("1234".getBytes())。这样一来单片机读到的数据则是31 32 33 34。但是在串口发送的时候先把16进制字符串转化为byte数组在发送出来,则是发送什么读取到的就是什么。使用:out.write(HexString2Bytes("1234"));那么读取到的还是1234。16进制字符串转化为byte数组的方法为:
public static byte[] HexString2Bytes(String src)
if (null == src || 0 == src.length())
return null;

byte[] ret = new byte[src.length() / 2];
byte[] tmp = src.getBytes();
for (int i = 0; i < (tmp.length / 2); i++)
ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);

return ret;


在用java做串口开发的时候建议使用开源的Rxtx做。效率、使用方法都要优。使用sun开源的comm个人觉得不是很便利。rxtx网上有开源实例。可以根据自己个需求进行加以修饰利用。本回答被提问者和网友采纳
参考技术B

额 我以前写过这个的啦 我有例子的啦

追问

可以发给我么 277063665@qq.com 谢谢

追答

额 是字节传输的呀 笔记本可以测试的呀 台式机要串口的呀

追问

不是要这样的 是发送的时候有个16进制的可以选择

如果是你这样的 数据是要不上来的 我今天试了n次都没有成功

必须是以16进制的格式发送

参考技术C RXTX 有例子

Qt串口通信接收的数据怎么分开传给不同文本框显示

参考技术A 串口只有一条数据线一条地线, 所以数据是以串行方式发送的,所谓串行就是数据按bit位依次发送,如下图
除了数据本身外一头一尾加上起始位和停止位(通知接收端表示数据的开始和结束), 有时还有校验位(发送数据的奇偶校验码), 取决于串口的工作方式.
比如你在串口助手上发送字符串abc, 实际串口发送是发送字母a,再发送字母b,c等
再详细一点,字母a,二进制数表示是1100001, 发送它的流程是:
1)发送停止位
2)依次发送 1 0 0 0 0 1 1 (低位在前)
3)发送校验位
4)发送停止位
5)空闲
你就随便在哪个类里加个静态变量,比如放在窗体里,假定窗体名叫 form1,那就是
public static boolean showflag=true;
然后在接收事件中要显示数据之前判断
if(form1.showflag)

//开始显示数据

然后在那个暂停按钮的click事件里写(假定这个按钮叫button1,初始的text为暂停)
form1.showflag=!form1.showflag;
if(form1.showflag) button1.Text="暂停";
else button1.Text="显示";本回答被提问者采纳

以上是关于java串口通信中怎样以十六进制数发送的主要内容,如果未能解决你的问题,请参考以下文章

单片机串口通信控制led灯的点亮

VB中发送16进制数据包?

stm32串口通讯时怎样接收字符串

单片机: EEPROM和串口通信

单片机串口通信数据可以直接进行加减乘除处理吗

stm32的串口接收字符串以十六进制数