1、大小端处理;
小端填充整形变量,低位在前面,高位在后面 int pos = 0; msg[pos++] = (byte) (anchor & 0x00ff); msg[pos++] = (byte) ((anchor & 0xff00) >> 8); msg[pos++] = (byte) ((anchor & 0xff0000) >> 16); msg[pos++] = (byte) ((anchor & 0xff000000) >> 24); 大端填充: msg[pos++] = (byte)(term_id & 0xff000000 >> 24); msg[pos++] = (byte)(term_id & 0xff0000 >> 16); msg[pos++] = (byte)(term_id & 0xff00 >> 8); msg[pos++] = (byte)(term_id & 0xff);
2、GBK处理
public static byte[] utf8ToGbk(String input) { Charset gb2312 = Charset.forName("GBK"); byte[] utf8Bytes = input.getBytes(Charset.forName("UTF-8")); byte[] led1_data = new String(utf8Bytes, Charset.forName("UTF-8")).getBytes(gb2312); return led1_data; } public static String gbkToUtf8(byte[] gbkBytes) { byte[] led1_data = new String(gbkBytes, Charset.forName("GBK")).getBytes(Charset.forName("UTF-8")); return new String(led1_data); }
3、modbus-crc16
/** * CRC-16-XMODEM校验 * @param bytes 待校验的值 * @return crc校验码 */ public static int cRC16XMODEM(byte[] bytes) { int crc = INITIAL; for (byte b : bytes) { crc ^= (b & 0xFF) << 8; // XOR with byte value for (int i = 0; i < 8; i++) { if ((crc & 0x8000) != 0) { crc = (crc << 1) ^ POLYNOMIAL; } else { crc <<= 1; } } } return crc & 0xFFFF; }
4、16字节输出日志:
public static void printHexString(String hint, byte[] b) { if (b == null){ return; } StringBuilder hexBuilder = new StringBuilder(); hexBuilder.append(hint+",b.length:"+b.length + " "); for (int i = 0; i < b.length; i++) { String hex = Integer.toHexString(b[i] & 0xFF); if (hex.length() == 1) { hex = '0' + hex; } hexBuilder.append(hex); hexBuilder.append(" "); if (i>0 && i%16==0){ String printStr = hexBuilder.toString(); hexBuilder = new StringBuilder(); Log.i(TAG, printStr.toString() + " "); } }; String printStr = hexBuilder.toString(); Log.i(TAG, printStr.toString() + " "); }
5、各种数据结构,TLV:
class TLV{ public short tag; public short length; public byte[] value; }; int generate_tlv_msg(TLV []items,int len, byte[] msg){ int pos = 0; //12字节头 msg[pos++] = 0; msg[pos++] = 0; msg[pos++] = (byte)(TCA_GET & 0xff00 >> 8); msg[pos++] = (byte)(TCA_GET & 0xff); msg[pos++] = (byte)(seq & 0xff00 >> 8); msg[pos++] = (byte)(seq & 0xff); seq++; msg[pos++] = (byte)(term_id & 0xff000000 >> 24); msg[pos++] = (byte)(term_id & 0xff0000 >> 16); msg[pos++] = (byte)(term_id & 0xff00 >> 8); msg[pos++] = (byte)(term_id & 0xff); msg[pos++] = (byte)(0); msg[pos++] = (byte)(0); for (int i=0; i<len; i++){ msg[pos++] = (byte)(items[i].tag&0xff00 >> 8); msg[pos++] = (byte)(items[i].tag&0x00ff); msg[pos++] = (byte)0; msg[pos++] = (byte)0; } msg[0] = (byte)(pos & 0xff00 >> 8); msg[1] = (byte)(pos & 0xff); return pos; }
-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com