/** * 串口数据转换工具类 * Created by Administrator on 2016/6/2. */ public class DataUtils { //------------------------------------------------------- // 判断奇数或偶数,位运算,最后一位是1则为奇数,为0是偶数 public static int isOdd(int num) { return num & 1; }
//------------------------------------------------------- //Hex字符串转int public static int HexToInt(String inHex) { if(TextUtils.isEmpty(inHex)) { return 0; } try {
//------------------------------------------------------- //1字节转2个Hex字符 public static String Byte2Hex(Byte inByte) { return String.format("%02x", new Object[]{inByte}).toUpperCase(); }
//------------------------------------------------------- //字节数组转转hex字符串 public static String ByteArrToHex(byte[] inBytArr) { StringBuilder strBuilder = new StringBuilder(); for (byte valueOf : inBytArr) { strBuilder.append(Byte2Hex(Byte.valueOf(valueOf))); strBuilder.append(" "); } return strBuilder.toString(); }
//------------------------------------------------------- //字节数组转转hex字符串,可选长度 public static String ByteArrToHex(byte[] inBytArr, int offset, int byteCount) { StringBuilder strBuilder = new StringBuilder(); int j = byteCount; for (int i = offset; i < j; i++) { strBuilder.append(Byte2Hex(Byte.valueOf(inBytArr[i]))); } return strBuilder.toString(); }
// ascii byte数 组转成String字符串,可选长度 public static String byteOfASCIIToString(byte[] inBytArr, int offset, int byteCount){ StringBuilder strBuilder = new StringBuilder(); int j = byteCount; for (int i = offset; i < j; i++) { char c=(char)inBytArr[i]; strBuilder.append(c); } return strBuilder.toString(); }
//------------------------------------------------------- //转hex字符串转字节数组 public static byte[] HexToByteArr(String inHex) { byte[] result; int hexlen = inHex.length(); if (isOdd(hexlen) == 1) { hexlen++; result = new byte[(hexlen / 2)]; inHex = "0" + inHex; } else { result = new byte[(hexlen / 2)]; } int j = 0; for (int i = 0; i < hexlen; i += 2) { result[j] = HexToByte(inHex.substring(i, i + 2)); j++; } return result; }
/** * 按照指定长度切割字符串 * * @param inputString 需要切割的源字符串 * @param length 指定的长度 * @return */ public static List<String> getDivLines(String inputString, int length) { List<String> divList = new ArrayList<>(); int remainder = (inputString.length()) % length; // 一共要分割成几段 int number = (int) Math.floor((inputString.length()) / length); for (int index = 0; index < number; index++) { String childStr = inputString.substring(index * length, (index + 1) * length); divList.add(childStr); } if (remainder > 0) { String cStr = inputString.substring(number * length, inputString.length()); divList.add(cStr); } return divList; }
/** * 计算长度,两个字节长度 * * @param val value * @return 结果 */ public static String twoByte(String val) { if (val.length() > 4) { val = val.substring(0, 4); } else { int l = 4 - val.length(); for (int i = 0; i < l; i++) { val = "0" + val; } } return val; }
/** * 校验和 * * @param cmd 指令 * @return 结果 */ public static String sum(String cmd) { List<String> cmdList = DataUtils.getDivLines(cmd, 2); int sumInt = 0; for (String c : cmdList) { sumInt += DataUtils.HexToInt(c); } String sum = DataUtils.IntToHex(sumInt); sum = DataUtils.twoByte(sum); cmd += sum; return cmd.toUpperCase(); }
public static int str8ToInt(String[] str){ int sum=0; for(int i=0;i<str.length;i++){
int value=computerBinary(str[i],str.length-1-i);
sum+=value; } return sum; } public static int str8ToInt(String str){ int sum=0; for(int i=0;i<str.length();i++){ String strIndex=str.charAt(i)+""; int value=computerBinary(strIndex,str.length()-1-i);
sum+=value; } return sum; } private static int computerBinary(String c, int index) { int vaule=Integer.valueOf(c); for(int i=0;i<index;i++){ vaule*=2; } return vaule; }