发表时间:2022-03-26来源:网络
关于收发数据的处理
如果选择了ASCII码,那么你键入的每个字符都会转化为ASCII对应的数字,比如发送的单个数字1 对应就是49,可以调试一下
调试如下图,ssss这个byte数组就一个数字,数字是49
如果发送的的 1234 四个数字,那么ssss就保存了4个数字,分别是49 50 51 52。
那么如果你选择的发送数据方式是十六进制:比如键入11,那么你键入的这个数字对应就是十进制的 17 对应byte[0]=11 接收端收到为 11 ;发送111(但这个大多调试助手不会让这样发送,111 这个数其实是0x0111 对应一个字节,所以可以改为0111),对应byte[0]=1,byte[1]=17 接受端收到为 01 11;发送a(也就是十进制的 10) 对应byte[0]=10,接收端是 0A ;
那么这个byte[]数组是怎么发送出去的哪? 我们可以进入SerialPortManager.sendToPort();里面看看,如下图
相应的,现在选择ASCII,接受到了一个字节 byte 的值是49,则对应就是字母1,就是把每个字节转化为对应的ASCII码。那么如果是十六进制的话,使用另一个调试助手发送16进制 01
调试收到的数据就是1,但是我们显示时候还是 需要显示01的

如果发送的是 十六进制的a,接受到的数据是10,显示就是0a,如果发送的是十六进制的aa,接受到的一个byte字节的数据是-86 显示就是aa。(这里顺便说一下为什么是-86的问题,0xaa对应二进制的10101010,而二进制的101010对应-86的补码。关于计算可以参考这个https://blog.csdn.net/craftsman1970/article/details/60466539)
主要计算就是byte字节转换为十六进制显示
public static String byteToHex(byte b) 函数里面的
String hex = Integer.toHexString(b & 0xFF); b就是-86的值,运算后hex=“aa”
下面关于这行代码的介绍摘自
https://blog.csdn.net/Jamie_Jiang/article/details/78343549博客
0x表示是十六进制。
ff是两个十六进制的数,每个f用二进制表示是1111,所以占四位(bit 对二进制而言的 一个十六进制的数字就对应二进制的四),两个f(ff)占八位(bit),八位(bit)也就是一个字节(byte).
最后,上面的这些都理解了,那么具体是怎么个流程呢?
首先toHexString传的参数应该是int类型32位,此处传的是byte类型8位,所以前面需要补24个0。然后& 0xff 就是把前面24个0去掉只要后8位。
(经过百度)int本身就是由4组byte组成,并且Java中本身就以byte读取。所以此处传参没有问题。
toHexString(b & 0xff)相当于做了一次位的与运算,将前24位字符省略,将后8位保留。即只转了后8位。而一个8位(bit) 用16进制表示刚好两位 即可得到两个十六进制的值。
————————————————
版权声明:本文为CSDN博主「姜姜好呢」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jamie_Jiang/article/details/78343549
上一篇:Java游戏编程不完全详解
下一篇:JavaWeb入门登录注册系统
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14