业务场景:在安卓端做一个上位机,发送指令给下位机去执行。送餐机器人要发送去几区几号桌送餐,由于下位机是其他公司的,而且只接受十六进制的指令,所以只能通过上位机转化为byte[]然后发送给下位机。
解决思路:几区几号桌是十进制的数字,101(一区一号桌),102(一区2号桌)..999(9区99号桌)
十进制--> 十六进制-> byte[] -->计算出校验位 ->拼接byte[] 十六进制指令发送
//函数说明,根据十进制数字,获取发送到几桌几号的指令
private byte[] getdeskcommand(int int_desknum) { byte[] buf_1 ={(byte)0x1B,(byte)0x00,(byte)0x0C,(byte)0x04},//命令头 buf_2={(byte)0x00,(byte)0x00,(byte)0x02,(byte)0xFF},//数据内容 buf_3={(byte)0xFF,(byte)0xFF},//校验位 buf_4={(byte)0x05};//结束标识 byte[] hb = new byte[2]; hb = Integer.toHexString(int_desknum).getBytes();//将十进制数转化为十六进制数,再转为byte[] String s = new String(hb); if(s.length()>2){ String s1 = s.substring(s.length()-1,s.length()); String s2 = s.substring(0,s.length()-1); buf_2[1] = Byte.decode("0x"+s1);//用系统的方法转化后的结果没有0x,需要加上 buf_2[0] = Byte.decode("0x"+s2); }else{ buf_2[1] = Byte.decode("0x"+s); } buf_3 = setParaCRC(buf_2);//根据数据位计算校验位 byte[] sum = sumbyte(sumbyte(sumbyte(buf_1,buf_2),buf_3),buf_4); return sum; } private byte[] sumbyte(byte[] b1,byte[] b2)//拼接byte[] { byte[] sum = new byte[b1.length+b2.length]; for(int i = 0;i<b1.length;i++){ sum[i] = b1[i]; } for(int i=0;i<b2.length;i++){ sum[b1.length+i] = b2[i]; } return sum; }
//CRC校验CRC-16/USB public byte[] setParaCRC(byte[] buf){ //int MASK = 0x0001,CRCSEED = 0xa001; int MASK = 0x0001,CRCSEED = 0xa001