最近项目涉及到android的串口通信,要发送的数据为十六进制,而且数据还要根据CRC16算法进行校验。
其中CRC16算法,网上找了很多,发现很多都有问题,最后,利用C语言版改编Java版,测试正常可用。

        /** * CRC检验 * @param Source * @return */public static String getCRC16(String source) {int crc = 0xA1EC;   // 初始值int polynomial = 0x1021;         // 校验公式 0001 0000 0010 0001byte[] bytes = stringToHexByte(source);  //把普通字符串转换成十六进制字符串for (byte b : bytes) {for (int i = 0; i < 8; i++) {boolean bit = ((b >> (7 - i) & 1) == 1);boolean c15 = ((crc >> 15 & 1) == 1);crc <<= 1;if (c15 ^ bit)crc ^= polynomial;}}crc &= 0xffff;StringBuffer result = new StringBuffer(Integer.toHexString(crc));while (result.length() < 4) { //CRC检验一般为4位,不足4位补0result.insert(0, "0");}return result.toString();}
在CRC16校验的时候,需要把要发送的字符串转成十六进制字符数组,以便校验,以下为转换方法。
 /** * 把字符串转换成十六进制字节数组 *  * @param hexString * @return byte[] */public static byte[] stringToHexByte(String hex) {int len = (hex.length() / 2);byte[] result = new byte[len];char[] achar = hex.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));}return result;}



更多相关文章

  1. Android客户端与服务器端通过DES加密认证
  2. android中易错点
  3. string.xml中占位符的使用
  4. Android(安卓)strings.xml文件定义字符串中的标签
  5. 关于 SimpleAdapter 适配器
  6. Android(安卓)使用Gson解析json用法
  7. Android(安卓)获得Url、Uri字符串后面拼接的参数
  8. Andrid中的plurals
  9. http通信,Android(安卓)Gzip压缩解压

随机推荐

  1. Android(安卓)Camera 使用小结
  2. TextView中ellipsize属性
  3. 文章分享:Android四大组件详解
  4. Android(安卓)CTS 测试研究之二
  5. android调用shell命令及权限问题
  6. android sdk introduction
  7. Android中使用WakeLock保证后台操作的顺
  8. android文本限制输入行数,多余部分显示省
  9. Android的线程Handler实现
  10. Android禁止截屏