今天在用java处理单片机上传的数据进行数据交互测试时,在处理一个byte数据的时候,卡了好一会儿,写个笔记,给大家避坑。
Java byte数据类型
在 Java 中,byte 是一种原始数据类型,它占用 8个比特位(即 1 个字节)的存储空间。由于 byte 类型是一个有符号类型,因此它的取值范围为 -2^7 ~ 2^7-1,即 -128 ~ 127。
这也就是说,Java 中的 byte 类型使用了最高 bit位 作为符号位,其余 7 位表示数值,因此它的最高位(最左侧位)表示符号,最高位为 0 表示正数,最高位为 1 表示负数,所以它的范围是从 -128 到 127。
所以我在做数据帧帧头判断时,是这么判断的
byte[] Buffer = new byte[512];
......
if(Buffer[0] == 0xA8)
{
...
}
结果发现,条件进不来,一时不知道是何原因。
调试的时候发现,Buffer[0]的值是-88.是个有符号数。所以,可以知道,当结果大于127的时候,都会以负数的形式显示。串口ttl,或者485总线传输的时候的时候,往往使用的都是 MODBUS RTU类型,数据类型都是无符号整数型的。一个字节的取值范围就是0~255。所以需要做一个类型的转换才能使的等式成立。
比如:
if(buffer[0] == (byte)0xA8)//进行类型转换
{
...
}
以上仅做参考,方法有很多,我这里只是为了方便对我的字节流进行处理。