[android]通讯中常用到的Helper

2024-02-08 11:08
文章标签 android 常用 通讯 helper

本文主要是介绍[android]通讯中常用到的Helper,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前在JT/T 794在android上实现时用到了不少类型转换的Helper,现将其公布出来,有需要的朋友拿去用吧。

1.常用类型和byte[]互转的ByteHelper;

2.BCD码压缩的BCDHelper;

3.CRC、XOR的CheckHelper 。

 

package com.van.base;import java.io.UnsupportedEncodingException;public class ByteHelper {/*** @Title: UInt16ToByte2* @Description: TODO(将UInt16转化为byte2)** @param Val* @return* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] UInt16ToByte2(Integer Val) {byte[] bts = new byte[2];bts[0] = (byte) ((0xff00 & Val) >> 8);bts[1] = (byte) (0xff & Val);return bts;}/*** @Title: UInt16ToByte2* @Description: TODO(将UInt16转化为byte2)** @param i* @param bts* @param offset* @return:void** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static void UInt16ToByte2(Integer i, byte[] bts, int offset) {byte[] btsTemp = UInt16ToByte2(i);int index = 0;while (index < 2) {bts[index + offset] = btsTemp[index];index += 1;}}/*** @Title: Int16ToByte2* @Description: TODO(将Int16转化为byte2)** @param Val* @return* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] Int16ToByte2(Short Val) {byte[] bts = new byte[2];bts[0] = (byte) ((Val >> 8) & 0xff);bts[1] = (byte) (Val & 0xff);return bts;}/*** @Title: Int16ToByte2* @Description: TODO(将Int16转化为byte2)** @param i* @param bts* @param offset* @return:void** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static void Int16ToByte2(Short i, byte[] bts, int offset) {byte[] btsTemp = Int16ToByte2(i);int index = 0;while (index < 2) {bts[index + offset] = btsTemp[index];index += 1;}}/*** @Title: UIntToByte4* @Description: TODO(将Uint32转化为byte4)** @param Val* @return* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] UIntToByte4(Long Val) {byte[] bts = new byte[4];bts[0] = (byte) ((0xff000000L & Val) >> 24);bts[1] = (byte) ((0xff0000 & Val) >> 16);bts[2] = (byte) ((0xff00 & Val) >> 8);bts[3] = (byte) (0xff & Val);return bts;}/*** @Title: UIntToByte4* @Description: TODO(将Uint32转化为byte4)** @param i* @param bts* @param offset* @return:void** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static void UIntToByte4(Long i, byte[] bts, int offset) {byte[] btsTemp = UIntToByte4(i);int index = 0;while (index < 4) {bts[index + offset] = btsTemp[index];index += 1;}}/*** @Title: IntToByte4* @Description: TODO(将int32转化为byte4)** @param Val* @return* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] IntToByte4(Integer Val) {byte[] bts = new byte[4];bts[0] = (byte) ((0xff000000 & Val) >> 24);bts[1] = (byte) ((0xff0000 & Val) >> 16);bts[2] = (byte) ((0xff00 & Val) >> 8);bts[3] = (byte) (0xff & Val);return bts;} /*** @Title: IntToByte4* @Description: TODO(将int32转化为byte4)** @param i* @param bts* @param offset* @return:void** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static void IntToByte4(Integer i, byte[] bts, int offset) {byte[] btsTemp = IntToByte4(i);int index = 0;while (index < 4) {bts[index + offset] = btsTemp[index];index += 1;}}/*** @Title: FloatToByte4* @Description: TODO(Float转byte4)** @param val* @return* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] FloatToByte4(float val) {return IntToByte4(Float.floatToIntBits(val));} /*** @Title: FloatToByte4* @Description: TODO(Float转byte4)** @param val* @param bts* @param offset* @return:void** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static void FloatToByte4(float val, byte[] bts, int offset) {byte[] btsTemp = FloatToByte4(val);int index = 0;while (index < 4) {bts[index + offset] = btsTemp[index];index += 1;}}/*** @Title: Byte2ToInt16* @Description: TODO(Byte2转int16)* * @param bt1* @param bt2* @return* @return:short* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static short Byte2ToInt16(byte bt1, byte bt2) {return (short) ((bt1 & 0xff) << 8 | bt2 & 0xff);}/*** @Title: Byte2ToInt16* @Description: TODO(Byte2转int16)* * @param bts* @param offset* @return* @return:short* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static short Byte2ToInt16(byte[] bts, int offset) {return Byte2ToInt16(bts[offset], bts[offset + 1]);}/*** @Title: Byte2ToUInt16* @Description: TODO(Byte2转uint16)* * @param bt1* @param bt2* @return* @return:Integer* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static Integer Byte2ToUInt16(byte bt1, byte bt2) {return (int) ((bt1 & 0xff) << 8 | bt2 & 0xff);}/*** @Title: Byte2ToUInt16* @Description: TODO( Byte2转uint16)* * @param bts* @param offset* @return* @return:Integer* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static Integer Byte2ToUInt16(byte[] bts, int offset) {return Byte2ToUInt16(bts[offset], bts[offset + 1]);}/*** @Title: Byte4ToInt32* @Description: TODO(Byte4转int32)* * @param bt1* @param bt2* @param bt3* @param bt4* @return* @return:Integer* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static Integer Byte4ToInt32(byte bt1, byte bt2, byte bt3, byte bt4) {return (bt1 & 0xff) << 24 | (bt2 & 0xff) << 16 | (bt3 & 0xff) << 8| bt4 & 0xff;}/*** @Title: Byte4ToInt32* @Description: TODO(Byte4转int32)* * @param bts* @param offset* @return* @return:Integer* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static Integer Byte4ToInt32(byte[] bts, int offset) {return Byte4ToInt32(bts[offset], bts[offset + 1], bts[offset + 2],bts[offset + 3]);}/*** @Title: Byte4ToUInt32* @Description: TODO(Byte4转uint32)* * @param bt1* @param bt2* @param bt3* @param bt4* @return* @return:long* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static long Byte4ToUInt32(byte bt1, byte bt2, byte bt3, byte bt4) {return (long) Byte4ToInt32(bt1, bt2, bt3, bt4);}/*** @Title: Byte4ToUInt32* @Description: TODO(Byte4转uint32)* * @param bts* @param offset* @return* @return:long* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static long Byte4ToUInt32(byte[] bts, int offset) {return Byte4ToUInt32(bts[offset], bts[offset + 1], bts[offset + 2],bts[offset + 3]);}/*** @Title: Byte4ToFloat* @Description: TODO(Byte4转Float)* * @param bt1* @param bt2* @param bt3* @param bt4* @return* @return:float* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static float Byte4ToFloat(byte bt1, byte bt2, byte bt3, byte bt4) {return Float.intBitsToFloat(Byte4ToInt32(bt1, bt2, bt3, bt4));}/*** @Title: Byte4ToFloat* @Description: TODO(Byte4转Float)* * @param bts* @param offset* @return* @return:float* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static float Byte4ToFloat(byte[] bts, int offset) {return Byte4ToFloat(bts[offset], bts[offset + 1], bts[offset + 2],bts[offset + 3]);}/*** @Title: StringToGBK* @Description: TODO(字符串转GBK编码)* * @param str* @return* @throws UnsupportedEncodingException* @return:byte[]* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static byte[] StringToGBK(String str)throws UnsupportedEncodingException {return str.getBytes("GBK");}/*** @Title: FillSGBK* @Description: TODO(填充GBK编码)* * @param str* @param bts* @param offset* @return* @throws UnsupportedEncodingException* @return:int* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static int FillSGBK(String str, byte[] bts, int offset)throws UnsupportedEncodingException {return FillSGBK(str, bts, offset, 0);}/*** @Title: FillSGBK* @Description: TODO(填充GBK编码)* * @param str* @param bts* @param offset* @param length* @return* @throws UnsupportedEncodingException* @return:int* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static int FillSGBK(String str, byte[] bts, int offset, int length)throws UnsupportedEncodingException {int len = 0;if (str != null) {byte[] tmp = StringToGBK(str);// 填充数据for (int i = 0; i < tmp.length; i++) {bts[offset + i] = tmp[i];}len = tmp.length;}// 补0for (int i = len; i < length; i++) {bts[offset + i] = 0;}return len > length ? len : length;}/*** @Title: GBKToString* @Description: TODO(GBK编码转字符串)* * @param bts* @return* @throws UnsupportedEncodingException* @return:String* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static String GBKToString(byte[] bts)throws UnsupportedEncodingException {return GBKToString(bts, 0);}/*** @Title: GBKToString* @Description: TODO(GBK编码转字符串)* * @param bts* @param offset* @return* @throws UnsupportedEncodingException* @return:String* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static String GBKToString(byte[] bts, int offset)throws UnsupportedEncodingException {return SGBKToString(bts, offset, bts.length - offset);}/*** @Title: SGBKToString* @Description: TODO(GBK编码转字符串(定长字符串))* * @param bts* @param offset* @param count* @return* @throws UnsupportedEncodingException* @return:String* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static String SGBKToString(byte[] bts, int offset, int count)throws UnsupportedEncodingException {return new String(bts, offset, count, "GBK");}/*** @Title: HexStringToBytes* @Description: TODO(HEX字符串转BYTE数组)* * @param hex* @return* @return:byte[]* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static byte[] HexStringToBytes(String hex) {byte[] bts = new byte[hex.length() / 2];for (int i = 0; i < bts.length; i++) {bts[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2),16);}return bts;}/*** @Title: BytesToHexString* @Description: TODO(BYTE数组转HEX字符串)* * @param bts* @return* @return:String* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static String BytesToHexString(byte[] bts) {return BytesToHexString(bts, 0, bts.length);}/*** @Title: BytesToHexString* @Description: TODO(BYTE数组转HEX字符串)* * @param bts* @param offset* @param count* @return* @return:String* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-8* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-8 wanjj v1.0.0 修改原因*/public static String BytesToHexString(byte[] bts, int offset, int count) {StringBuilder sb = new StringBuilder(bts.length * 2);for (int i = 0; i < count; i++) {sb.append(Integer.toHexString(bts[i + offset]));}return sb.toString();}public static int BoolToByte(boolean bl) {return bl ? 1 : 0 << 0;}
}

 


 

package com.van.base;import java.io.UnsupportedEncodingException;import android.text.format.Time;public class BCDHelper { /*** @Title: StrToBCD* @Description: TODO(用BCD码压缩数字字符串)** @param str* @return* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] StrToBCD(String str) {return StrToBCD(str, str.length());}public static byte[] StrToBCD(String str, int numlen) {if (numlen % 2 != 0)numlen++;while (str.length() < numlen) {str = "0" + str;}byte[] bStr = new byte[str.length() / 2];char[] cs = str.toCharArray();int i = 0;int iNum = 0;for (i = 0; i < cs.length; i += 2) {int iTemp = 0;if (cs[i] >= '0' && cs[i] <= '9') {iTemp = (cs[i] - '0') << 4;} else {// 判断是否为a~fif (cs[i] >= 'a' && cs[i] <= 'f') {cs[i] -= 32;}iTemp = (cs[i] - '0' - 7) << 4;}// 处理低位if (cs[i + 1] >= '0' && cs[i + 1] <= '9') {iTemp += cs[i + 1] - '0';} else {// 判断是否为a~fif (cs[i + 1] >= 'a' && cs[i + 1] <= 'f') {cs[i + 1] -= 32;}iTemp += cs[i + 1] - '0' - 7;}bStr[iNum] = (byte) iTemp;iNum++;}return bStr;}/*** @Title: bcdToInt* @Description: TODO(BCD转int)** @param bcdNum* @param offset* @param numlen* @return* @return:int** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static int bcdToInt(byte[] bcdNum, int offset, int numlen) {return Integer.parseInt(bcdToString(bcdNum, offset, numlen));}/*** @Title: bcdToString* @Description: TODO(BCD转字符串)** @param bcdNum* @param offset* @param numlen* @return* @return:String** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static String bcdToString(byte[] bcdNum, int offset, int numlen) {int len = numlen / 2;if (numlen % 2 != 0)len++;StringBuffer sb = new StringBuffer();for (int i = 0; i < len; i++) {sb.append(Integer.toHexString((bcdNum[i + offset] & 0xf0) >> 4));sb.append(Integer.toHexString(bcdNum[i + offset] & 0xf));}return sb.toString();}/*** @Title: Bcd3ToDateTime* @Description: TODO(BCD码转日期)** @param data* @param offset* @return* @return:Time** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static Time Bcd3ToDateTime(byte[] data, int offset) {int year = 0, month = 0, monthDay = 0;year = Integer.parseInt("20" + bcdToString(data, offset, 2));month = bcdToInt(data, offset + 1, 2);monthDay = bcdToInt(data, offset + 2, 2);Time time = new Time("GMT+8");time.set(monthDay, month, year);return time;}public static Time Bcd5ToDateTime(byte[] data, int offset) {int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;year = Integer.parseInt("20" + bcdToString(data, offset, 2));month = bcdToInt(data, offset + 1, 2);monthDay = bcdToInt(data, offset + 2, 2);hour = bcdToInt(data, offset + 3, 2);minute = bcdToInt(data, offset + 4, 2);Time time = new Time("GMT+8");time.set(second, minute, hour, monthDay, month, year);return time;} /*** @Title: Bcd6ToDateTime* @Description: TODO(BCD码转时间格式)** @param data* @param offset* @return* @return:Time** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static Time Bcd6ToDateTime(byte[] data, int offset) {int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;year = Integer.parseInt("20" + bcdToString(data, offset, 2));month = bcdToInt(data, offset + 1, 2);monthDay = bcdToInt(data, offset + 2, 2);hour = bcdToInt(data, offset + 3, 2);minute = bcdToInt(data, offset + 4, 2);second = bcdToInt(data, offset + 5, 2);Time time = new Time("GMT+8");time.set(second, minute, hour, monthDay, month, year);return time;}public static Time Bcd7ToDateTime(byte[] data, int offset) {int year = 0, month = 0, monthDay = 0, hour = 0, minute = 0, second = 0;year = bcdToInt(data, offset, 4);month = bcdToInt(data, offset + 2, 2);monthDay = bcdToInt(data, offset + 3, 2);hour = bcdToInt(data, offset + 4, 2);minute = bcdToInt(data, offset + 5, 2);second = bcdToInt(data, offset + 6, 2);Time time = new Time("GMT+8");time.set(second, minute, hour, monthDay, month, year);return time;}/*** @Title: DateTimeToBcd3* @Description: TODO(日期转BCD码)** @param dt* @return* @throws UnsupportedEncodingException* @return:byte[]** @version: v1.0.0* @author: WANJJ* @date: 2011-11-17* * Modification History: * Date  Author  Version  Description* ---------------------------------------------------------** 2011-11-17  wanjj v1.0.0   修改原因*/public static byte[] DateTimeToBcd3(Time dt)throws UnsupportedEncodingException {StringBuilder sb = new StringBuilder();sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));sb.append(FStrLen(String.valueOf((dt.month)), 2));sb.append(FStrLen(String.valueOf((dt.monthDay)), 2));return StrToBCD(sb.toString());}public static byte[] DateTimeToBcd5(Time dt)throws UnsupportedEncodingException {StringBuilder sb = new StringBuilder();sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));sb.append(FStrLen(String.valueOf(dt.month), 2));sb.append(FStrLen(String.valueOf(dt.monthDay), 2));sb.append(FStrLen(String.valueOf(dt.hour), 2));sb.append(FStrLen(String.valueOf(dt.minute), 2));return StrToBCD(sb.toString());}public static byte[] DateTimeToBcd6(Time dt)throws UnsupportedEncodingException {StringBuilder sb = new StringBuilder();sb.append(FStrLen(String.valueOf((dt.year - 2000)), 2));sb.append(FStrLen(String.valueOf(dt.month), 2));sb.append(FStrLen(String.valueOf(dt.monthDay), 2));sb.append(FStrLen(String.valueOf(dt.hour), 2));sb.append(FStrLen(String.valueOf(dt.minute), 2));sb.append(FStrLen(String.valueOf(dt.second), 2));return StrToBCD(sb.toString());}public static byte[] DateTimeToBcd7(Time dt)throws UnsupportedEncodingException {StringBuilder sb = new StringBuilder();sb.append(FStrLen(String.valueOf(dt.year), 4));sb.append(FStrLen(String.valueOf(dt.month), 2));sb.append(FStrLen(String.valueOf(dt.monthDay), 2));sb.append(FStrLen(String.valueOf(dt.hour), 2));sb.append(FStrLen(String.valueOf(dt.minute), 2));sb.append(FStrLen(String.valueOf(dt.second), 2));return StrToBCD(sb.toString());}public static String FStrLen(String str, int len) {if (str.length() < len) {str = "0" + str;}return str;}/*** @Title: GetNowTime* @Description: TODO(获取当前GMT+8时间)* * @return* @return:Time* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-9* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-9 wanjj v1.0.0 修改原因*/public static Time GetNowTime() {Time t = GetNewTime();t.setToNow();return t;}public static Time GetNewTime() {return new Time("GMT+8");}/*** @Title: TimeDiff* @Description: TODO(计算两个时间相差毫秒数)* * @param tm1* @param tm2* @return* @return:long* * @version: v1.0.0* @author: WANJJ* @date: 2011-11-11* *        Modification History: Date Author Version Description*        ---------------------------------------------------------**        2011-11-11 wanjj v1.0.0 修改原因*/public static long TimeDiff(Time tm1, Time tm2) {return (tm1.toMillis(true) - tm2.toMillis(true));}
}


 

 

package com.van.base;import java.util.ArrayList;/*** 用户可以直接调用类里面的两个静态方法* * @author WANJJ* */
public class CheckHelper {/*** 得出CRC计算结果* * @param buf*            要计算CRC的字符串* @return 整数*/public static int getCRC(String buf) {int crc = 0xFFFF; // initial valueint polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)for (int j = 0; j < buf.length(); j++) {char b = buf.charAt(j);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;return crc;}/*** 得出CRC计算结果* * @param buf*            要计算CRC的字符串* @return 字符串,2个字节*/public static String getCRCString(String buf) {int crc = 0xFFFF; // initial valueint polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)for (int j = 0; j < buf.length(); j++) {char b = buf.charAt(j);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;String str = "" + (char) (crc / 256) + (char) (crc % 256);return str;}/*** 得出异或计算结果* * @param data*            要计算异或的数据* @param offset*            偏移位* @param length*            长度* @return byte*/public static byte CheckXOR(byte[] data, int offset, int length) {byte xda = 0;for (int i = 0; i < length; i++) {xda = (byte) ((data[i + offset] ^ xda) & 0xFF);}return xda;}/*** 校验并转义(异或效验)* * @param data*            要计算异或的数据* @param offset*            偏移位* @param length*            长度* @return byte*/public static void XORAndEscape(ArrayList<Byte> data, int offset, int length) {byte xda = 0;for (int i = offset; i < offset + length; i++) {xda = (byte) (data.get(i) ^ xda);if (data.get(i) == 0x7e)// 转义 向后插入一个0x02{data.set(i, (byte) 0x7d);data.add(i + 1, (byte) 0x02);length++;i++;} else if (data.get(i) == 0x7d)// 转义 向后插入一个0x01{data.add(i + 1, (byte) 0x01);length++;i++;}}data.add(offset + length, xda);if (xda == 0x7e)// 转义 向后插入一个0x02data.add(offset + length + 1, (byte) 0x02);else if (xda == 0x7d)// 转义 向后插入一个0x01data.add(offset + length + 1, (byte) 0x01);}
}


 

 

这篇关于[android]通讯中常用到的Helper的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/690831

相关文章

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情