本着重复的问题老是被问,在此记录一下,以后就这看里吧。
java 如何解析bit?
文档要求如下:
设备上传数据:
这里说明一下:收到的0x0200对应的是图中的18 硬件故障部分
十六进制 0x0200(小端式)第1位字节 0x02
十六进制 0x02转换成bin码对应0000 0010
bit1
是最右边的位,对应二进制的最低位,值为0
。bit2
是右数第二位,对应二进制的第二低位,值为1
按文档描述是从bit1开始:
bit1 :急停按钮动作故障;
bit2 :无可用整流模块;
所以这里上传是 代表的是 bit2 :无可用整流模块 有故障,而不是 bit1 :急停按钮动作故障;
java代码按位解析实现代码:
//硬件故障
byte[] aHardwareFailureBytes = new byte[2];
System.arraycopy(data, position, aHardwareFailureBytes, 0, 2);
out("硬件故障:" + HexTool.bytesToHexString(aHardwareFailureBytes));
//Bit 位表示(0 否 1 是),低位到高位顺序
//Bit1:急停按钮动作故障;
//Bit2:无可用整流模块;
//Bit3:出风口温度过高;
//Bit4:交流防雷故障;
//Bit5:交直流模块 DC20 通信中断;
//Bit6:绝缘检测模块 FC08 通信中断;
//Bit7:电度表通信中断;
//Bit8:读卡器通信中断;
//Bit9:RC10 通信中断;
//Bit10:风扇调速板故障;
//Bit11:直流熔断器故障;
//Bit12:高压接触器故障;
//Bit13:门打开;
byte bb1 = aHardwareFailureBytes[0];
byte bb2 = aHardwareFailureBytes[1];
int b1 = (bb1 >> 0) & 1;
int b2 = (bb1 >> 1) & 1;
int b3 = (bb1 >> 2) & 1;
int b4 = (bb1 >> 3) & 1;
int b5 = (bb1 >> 4) & 1;
int b6 = (bb1 >> 5) & 1;
int b7 = (bb1 >> 6) & 1;
int b8 = (bb1 >> 7) & 1;
int b9 = (bb2 >> 0) & 1;
int b10 = (bb2 >> 1) & 1;
int b11 = (bb2 >> 2) & 1;
int b12 = (bb2 >> 3) & 1;
int b13 = (bb2 >> 4) & 1;
代码里的 b1-b13 之间就是对应文档上的 bit1-bit13