📄 utils.java
字号:
package com.sensevision.reader;
public class Utils {
public static String getStrCRC16C(char[] str){
int current_crc_value=cRC16C(str);
return Integer.toHexString(current_crc_value).toUpperCase();
}
public static int cRC16C(char[] str){
final int POLYNOMIAL = 0x8408; // x^16 + x^12 + x^5 + 1
final int PRESET_VALUE = 0xFFFF;
//final int CHECK_VALUE = 0xF0B8;
int current_crc_value = PRESET_VALUE;
for (int i = 0; i < str.length; i++) {
current_crc_value = current_crc_value ^ (int) str[i];
for (int j = 0; j < 8; j++) {
if ((current_crc_value & 0x0001) != 0) {
current_crc_value = (current_crc_value >>> 1) ^ POLYNOMIAL;
} else {
current_crc_value = (current_crc_value >>>1);
}
}
}
return current_crc_value;
}
public static String toUnicode(String str){
byte[] values=str.getBytes();
StringBuffer newValue=new StringBuffer();
for(int i=0;i<values.length;i++){
String value=Integer.toHexString(values[i]).toUpperCase();
if(value.length()==1){
newValue.append("0");
}
newValue.append(value);
}
return newValue.toString();
}
public static void main(String[] args) {
Utils CRC16 = new Utils();
//
// byte data1[] = { 0x01 ,0x02,0x03,0x04};
// byte data2[] = { 0x02 };
//int check = CRC16.getCRC16(data2);
//int check = CRC16.getdCRC16(toUnicode("0001002056").getBytes());
//int data1[] = { 0x31 ,0x32,0x33};
char data1[]={0x01, 0x00, 0x0A ,0x00 ,0x00 ,0x00 ,0x39, 0xB2 ,0x32 ,0x01 ,0x00 ,0x40 ,0x05 ,0xE0};
//byte data1[] = { 0,2 ,0,1,0,2,0,0,0,7,0,0};
// int data1[] = { 0x00,0x00,0x0A,0x00,0x00,0x00,0x39,0xB2,0x32,0x01,0x00,0x40,0x05,0xE0};
//00000A00000039B23201004005E0
// int data1[] = { 0x05,00,0x0A,0x00,0x00,0x00,0x39,0xB2,0x32,0x01,0x00,0x40,0x05,0xE0};//,0xF4,0xAE};
//int check = CRC16.getCRC16(data1);
//int check = CRC16.getCRC16("00".getBytes());
//System.out.println("HEX:\t" + Integer.toHexString(check).toUpperCase());
System.out.println("HEX:\t" +getStrCRC16C(toUniteStr("00000A00000039B23201004005E0",2).toCharArray()));
System.out.println(toBack("12345678",2));
System.out.println(cRC16C(data1));
// String s=toUnicode("26");
// System.out.println(s);
}
public static String toBack (String s,int charNum){
if(s.length()<=charNum){
return s;
}
return s.substring(s.length()-charNum,s.length())+toBack(s.substring(0,s.length()-charNum),charNum);
}
/**
* 将从s每charNum个字符合成一个字符,生成一个新串
* @param s 将要处理的字符串
* @param charNum 合并取的字符数:例如果s='1234' charNum=2 就是将12,34分别合并生成一个字符,长度为2
* @return
*/
public static String toUniteStr(String s,int charNum){
if(s.length()<=charNum){
return String.valueOf((char)Integer.parseInt(s,16));
}
char value=(char)Integer.parseInt(s.substring(s.length()-charNum,s.length()),16);
return toUniteStr(s.substring(0,s.length()-charNum),charNum)+value;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -