用java 实现 CRC16校验 30C

String str = "V0/SC1234567890ABCDEFGH/IN1017/PN10001088/UN2078/CAS26471-62-5/PK1AK200/20161112//100/10001/";

将字符串中的字母以及数字,都通过ASCII表转换成二进制数字串,直至最后的一个分隔符“/”,将此二进制数字串进行CRC16的运算,并将计算的结果用大写HEX标识.

表达多项式为:

X16 + X12 + X5 + 1
初始值为 0x5368。

请各位大神帮忙写个工具类谢谢

2个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java实现 循环冗余校验(CRC)算法

算法的要求是如下: ① 装一个16 位寄存器,所有数位均为1。 ② 取被校验串的一个字节与16 位寄存器的高位字节进行“异或”运算。运算结果放 入这个16 位寄存器。 ③ 把这个16 寄存器向右移一位。 ④ 若向右(标记位)移出的数位是1,则生成多项式1010 0000 0000 0001 和这个寄 存器进行“异或”运算;若向右移出的数位是0,则返回③。 ⑤ 重复③和④,直至移出8 位。 ⑥ 取被校验串的下一个字节 ⑦ 重复③~⑥,直至被校验串的所有字节均与16 位寄存器进行“异或”运算,并移位 8 次。 ⑧ 这个16 位寄存器的内容即2 字节CRC 错误校验码。 校验码按照先高字节后低字节的顺序存放。 我自己理解实现了下: ``` public static short crc16(byte[] data) { short crc = (short) 0xFFFF; short dxs = (short) 0xA001; byte tc; byte sbit; for (int i = 0; i < data.length; i++) { tc = (byte) ((crc & 0xff00) >> 8); crc = (short) (tc ^ data[i]); for (int r = 0; r < 8; r++) { sbit = (byte) (crc & 0x01); crc = (short) (crc >> 1); if (sbit != 0) crc = (short) (crc ^ dxs); } } System.out.println(bytesToHexString(new byte[] { (byte) ((crc & 0xff00) >> 8), (byte) (crc & 0xff) })); return crc; } //将字节数组按16进制输出 public static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (stringBuilder.length() != 0) { stringBuilder.append(","); } if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } ``` 可是我计算出的接口和文档上对不上,不知道哪里有问题?

16位的CRC校验 ,把C实现的,用JAVA实现

//本部分的定义需要根据不同的编译器进行修改 //U8 U16 U32分别表示8位、16位、32位无符号数值 #define U8 unsigned char #define U16 unsigned short #define U32 unsigned int #endif //C文件部分 U16 Crc16CCITT_Table[16]={ /* CRC 16bit余式表 */ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef }; /**************************************************************************** 函数名 : void Crc16CCITT(U8 *pDataIn, U32 DataLen, U8 CrcOut[2]) 描述 : 用移位的方法计算一组数字的16位CRC-CCITT校验值 输入参数 : 1、U8 *pDataIn : 要进行16位CRC-CCITT计算的数 2U32 DataLen : DataIn数组的长度 输出参数 : 1、U8 CrcOut[2] : 16位CRC-CCITT计算的结果 返回值 : 无 ****************************************************************************/ void Crc16CCITT(U8 *pDataIn, U32 DataLen, U8 CrcOut[2]) { U16 Crc = 0; U8 Temp; while (DataLen-- != 0) { Temp = ((U8)(Crc>>8))>>4; Crc <<= 4; Crc ^= Crc16CCITT_Table[Temp^(*pDataIn/16)]; Temp = ((BYTE)(Crc>>8))>>4; Crc <<= 4; Crc ^= Crc16CCITT_Table[Temp^(*pDataIn&0x0f)]; pDataIn++; } CrcOut[0] = Crc/256; CrcOut[1] = Crc%256; }

CRC-16-CCITT-FALSE校验求解!!!

CRC16/CCITT-TRUE 如下 公式:x16+x15+x5+1     宽度:16     Poly值:0x1021     初始值:0x0000     基准输入:true     基准输出:true     标志位:0x0000 (1)、预置1个16位的寄存器为十六进制0(即全为0),称此寄存器为CRC寄存器; (2)、把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器,高八位数据不变; (3)、把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位; (4)、如果移出位为0:重复第3步(再次右移一位);如果移出位为1,CRC寄存器与多 项式&H8408进行异或;(&H8408为&H1021反序后的值) (5)、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; (6)、重复步骤2到步骤5,进行通讯信息帧下一个字节的处理; (7)、将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换; (8)、最后得到的CRC寄存器内容即为:CRC码  CRC16/CCITT-FALSE:     公式:x16+x15+x5+1     宽度:16     Poly值:0x1021     初始值:0xFFFF     基准输入:false     基准输出:false     标志位:0x0000 请大侠指点,如何处理!

802.11帧的crc校验问题

对802.11帧的crc校验是帧主体和帧头,那对帧头的校验具体是怎样的呢? 比如java的crc32这个函数用来进行crc校验 对帧主体,我直接把明文放进去:crc32.update("helloworld".getBytes()) 现在我的帧头是以二进制的位来表示的,比如00001000,这个该怎么校验呢?是crc32.update("00001000")吗?还是把这个二进制转为10进制再转为string和其他的帧头拼接起来getBytes()? 但是这样要是出现"11110001"就会出错

把下面这段c语言的crc校验 转换成java的,麻烦了, 我是实在不会

//crc 之前数据,数据长度 unsigned short CRC16(unsigned char const *buf, unsigned int len) { unsigned short Crc=0xffff; int i; for(i=0; i<len; i++) { Crc = ((Crc >> 8) & 0xFF) ^ CRC16Table [(Crc^ *buf++) & 0xFF]; } return Crc; }

c语言版的crc16算法 帮忙转个java版!

C代码: static const INT16U ushCrcTab[] = { 0x0000,0x8005,0x800f,0x000a,0x801b,0x001e,0x0014,0x8011, 0x8033,0x0036,0x003c,0x8039,0x0028,0x802d,0x8027,0x0022, 0x8063,0x0066,0x006c,0x8069,0x0078,0x807d,0x8077,0x0072, 0x0050,0x8055,0x805f,0x005a,0x804b,0x004e,0x0044,0x8041, 0x80c3,0x00c6,0x00cc,0x80c9,0x00d8,0x80dd,0x80d7,0x00d2, 0x00f0,0x80f5,0x80ff,0x00fa,0x80eb,0x00ee,0x00e4,0x80e1, 0x00a0,0x80a5,0x80af,0x00aa,0x80bb,0x00be,0x00b4,0x80b1, 0x8093,0x0096,0x009c,0x8099,0x0088,0x808d,0x8087,0x0082, 0x8183,0x0186,0x018c,0x8189,0x0198,0x819d,0x8197,0x0192, 0x01b0,0x81b5,0x81bf,0x01ba,0x81ab,0x01ae,0x01a4,0x81a1, 0x01e0,0x81e5,0x81ef,0x01ea,0x81fb,0x01fe,0x01f4,0x81f1, 0x81d3,0x01d6,0x01dc,0x81d9,0x01c8,0x81cd,0x81c7,0x01c2, 0x0140,0x8145,0x814f,0x014a,0x815b,0x015e,0x0154,0x8151, 0x8173,0x0176,0x017c,0x8179,0x0168,0x816d,0x8167,0x0162, 0x8123,0x0126,0x012c,0x8129,0x0138,0x813d,0x8137,0x0132, 0x0110,0x8115,0x811f,0x011a,0x810b,0x010e,0x0104,0x8101, 0x8303,0x0306,0x030c,0x8309,0x0318,0x831d,0x8317,0x0312, 0x0330,0x8335,0x833f,0x033a,0x832b,0x032e,0x0324,0x8321, 0x0360,0x8365,0x836f,0x036a,0x837b,0x037e,0x0374,0x8371, 0x8353,0x0356,0x035c,0x8359,0x0348,0x834d,0x8347,0x0342, 0x03c0,0x83c5,0x83cf,0x03ca,0x83db,0x03de,0x03d4,0x83d1, 0x83f3,0x03f6,0x03fc,0x83f9,0x03e8,0x83ed,0x83e7,0x03e2, 0x83a3,0x03a6,0x03ac,0x83a9,0x03b8,0x83bd,0x83b7,0x03b2, 0x0390,0x8395,0x839f,0x039a,0x838b,0x038e,0x0384,0x8381, 0x0280,0x8285,0x828f,0x028a,0x829b,0x029e,0x0294,0x8291, 0x82b3,0x02b6,0x02bc,0x82b9,0x02a8,0x82ad,0x82a7,0x02a2, 0x82e3,0x02e6,0x02ec,0x82e9,0x02f8,0x82fd,0x82f7,0x02f2, 0x02d0,0x82d5,0x82df,0x02da,0x82cb,0x02ce,0x02c4,0x82c1, 0x8243,0x0246,0x024c,0x8249,0x0258,0x825d,0x8257,0x0252, 0x0270,0x8275,0x827f,0x027a,0x826b,0x026e,0x0264,0x8261, 0x0220,0x8225,0x822f,0x022a,0x823b,0x023e,0x0234,0x8231, 0x8213,0x0216,0x021c,0x8219,0x0208,0x820d,0x8207,0x0202 }; /********************************************************************************* * Function Name: INT16U CRC16(INT8U *pucTmpStr,INT8U uiTmpLen) * Description: 对输入字符串进行CRC校验,CRC16算法因子: x^16+x^15+x^2+1. * Input: *pucTmpStr: 要校验的字符串地址指针; * uiTmpLen: 输入要计算的长度. * Output: 无 * Return: CRC校验结果 ***********************************************************************************/ INT16U CRC16(INT8U *pucTmpStr,INT16U uiTmpLen) { INT16U ushCRC; INT16U ushCombV; INT8U *pucStr = pucTmpStr; ushCRC=0; for(;uiTmpLen!=0; uiTmpLen--) { ushCombV=(ushCRC>>8)^*pucStr++; ushCRC=(ushCRC<<8)^ushCrcTab[ushCombV]; } return ushCRC; }

Iso14443 CRC-a和b的校验算法细节

在网上找的要么不清楚要么没提到细节 能不能提供一下代码或者详细的说明文档 谢谢

JAVA SOCKET数据传输完整性校验

大文件传输时候,小弟遇到如下问题: 1.怎么校验每包数据是否完整,发现这包数据不完整时,怎么重新获取一次本包数据 2.当数据传输完成时校验完整性,不完整则重新传输 广大的各位云友提下思路啊,谢谢

请高手把一下代码转换成java程序。

调用程序: sum == CalcCRC8( &temp_string[1],(len-1) ) 子程序: /////////////////////按位校验 循环冗余校验 uint8_t CalcCRC8(uint8_t *ptr,uint8_t len) // ptr 为数据指针 len 为数据长度 { uint8_t i; uint8_t crc=0; while(len--) { /////////////////////////////////////// i=0x80; while(i!=0) { if(((crc&0x80)!= 0) && ((*ptr)&i)!= 0) //CRC最高位为1且校验bit为1 { crc <<= 1; } else if(((crc&0x80)!= 0) && ((*ptr)&i) == 0) //CRC最高位为1且校验bit为0 { crc <<= 1; crc ^= 0x31; } else if(((crc&0x80) == 0) && ((*ptr)&i)!= 0) //CRC最高位为0且校验bit为1 { crc <<= 1; crc ^= 0x31; } else if(((crc&0x80) == 0) && ((*ptr)&i) == 0) //CRC最高位为0且校验bit为0 { crc <<= 1; } i >>= 1; } ptr++; } return(crc); }

java报文解析!求大神指导!

大家帮我解析一下报文吧!我用的是UDP通信拿到数据,数据的类型是这样的S5W1449!p1r!p1r003B1s!S6WGGG00!p2r!p2r00003!p1r!p1r003B1s! 第0~2位为p1r或p2r,第3~6位为对应侧(p1r或p2r)的点位,第7位为状态位第8位为CRC校验位(将以上待发送的8位 异或)第9位为!结束位。 比如p1r!p1r003B1s!,我要拿到点位003B,要把它转化成十进制显示在我的界面画图!我要怎么解析报文!能写出具体函数最好,新人求解析!通信我已经做好了!

JAVA String类型转byte类型 的问题

现在有一个String指令 ``` String a="01 03 03ed 0001"; ``` 我通过自己写的CRC转码方法将上述指令转码 ``` String a1=getCRC.getCRC(a); ``` 然后把两个字符串拼接起来 ``` String a2=a+" "+a1; ``` 然后获得各数值,其实就是去掉中间的空格,我就笼统的写一下。 ``` String h=a2.substring(0, 2); String h1=a2.substring(3, 5); String h2=a2.substring(6, 8); String h3=a2.substring(8, 10); String h4=a2.substring(11, 13); String h5=a2.substring(13, 15); String h6=a2.substring(16, 18); String h7=a2.substring(19, 21); ``` 然后将得到的字符串再拼接起来 ``` String h8=h+h1+h2+h3+h4+h5+h6+h7; ``` 得到的h8的数据为:010303ed0001147B 理想情况下需要呈现的buye数组为下面的方式 ``` byte b=new byte[]{ 0x01,0x03,0x03,(byte)0xed,0x00,0x01,0x14,(byte)0x7B }; ``` 现在尝试了很多种方法都无法变成上述样子,想来此求助一下,有没有大神指导一下。 补充代码中getCRC代码块 ``` public class getCRC { public static String getCRC(String data) { data = data.replace(" ", ""); int len = data.length(); if (!(len % 2 == 0)) { return "0000"; } int num = len / 2; byte[] para = new byte[num]; for (int i = 0; i < num; i++) { int value = Integer.valueOf(data.substring(i * 2, 2 * (i + 1)), 16); para[i] = (byte) value; } return getCRC(para); } /** * 计算CRC16校验码 * * @param bytes * 字节数组 * @return {@link String} 校验码 * @since 1.0 */ public static String getCRC(byte[] bytes) { // CRC寄存器全为1 int CRC = 0x0000ffff; // 多项式校验值 int POLYNOMIAL = 0x0000a001; int i, j; for (i = 0; i < bytes.length; i++) { CRC ^= ((int) bytes[i] & 0x000000ff); for (j = 0; j < 8; j++) { if ((CRC & 0x00000001) != 0) { CRC >>= 1; CRC ^= POLYNOMIAL; } else { CRC >>= 1; } } } // 结果转换为16进制 String result = Integer.toHexString(CRC).toUpperCase(); if (result.length() != 4) { StringBuffer sb = new StringBuffer("0000"); result = sb.replace(4 - result.length(), 4, result).toString(); } //高位在前地位在后 //return result.substring(2, 4) + " " + result.substring(0, 2); // 交换高低位,低位在前高位在后 return result.substring(2, 4) + " " + result.substring(0, 2); } } ```

求帮忙把这段校验代码翻译成JAVA

const u8 CRCHi[] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40} ; const u8 CRCLo[] = { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,0x43, 0x83, 0x41, 0x81, 0x80, 0x40} ; u16 CRC_calc(u8 *pStr, u8 Len) { u8 RsltHi = 0xFF ; u8 RsltLo = 0xFF ; u8 Index ; while (Len--) { Index = RsltHi ^ *(pStr++); RsltHi = RsltLo ^ CRCHi[Index]; RsltLo = CRCLo[Index] ; } return (RsltLo<<8)|RsltHi; }

求助,计算机网络的作业,只懂基础java和c++知识,实在没办法了

选用任意一种你熟悉的高级语言实现一个CRC程序,要求输入参数为二进制表示的数据帧和生成多项式,输出为尾部携带循环冗余校验码的数据帧。

MODBUS通信,取一组bit参数,返回的规则是什么,在线等,急!!!

比如,我要取17个参数的状态,应该对应17个0或1,但返回的是三个整数,那么这三个整数怎么得出我要的17个0或1,是二进制吗? 还有,读取的是设备的线圈状态,通信正常,就是返回的数据不知道怎么处理 请各位大神帮帮忙。

大家帮我找一下问题所在???Syntax error, insert ";" to complete

package com.jsp.javabean; import java.io.IOException; public class CRC16Checker { private static int[] index = new int[] { 16, 15, 2, 0 }; private static int[] getBinary(String text) { StringBuffer num = new StringBuffer(); String s; char ch; for (int i = 0; i < text.length(); i++) { // Change each char to s = Integer.toBinaryString(text.charAt(i)); // binary code. for (int j = 8 - s.length(); j > 0; j--) num.append(0); num.append(s); } int len = num.length(); int[] code = new int[len]; for (int i = 0; i < len; i++) // Change each 0/1 char to int. code[i] = Character.getNumericValue(num.charAt(i)); return code;    } private static String toHex(int[] num) { StringBuffer hex = new StringBuffer(num.length / 4); char[] ch = new char[4]; for (int i = 0; i < num.length;) { ch[0] = Character.forDigit(num[i++], 2); ch[1] = Character.forDigit(num[i++], 2); ch[2] = Character.forDigit(num[i++], 2); ch[3] = Character.forDigit(num[i++], 2); hex.append(Integer.toHexString(Integer.parseInt(String.valueOf(ch), 2))); } return hex.toString();   } // CRC codes main process public static int[] makeCRCCodes(int[] sourceCodes, int[] multinomial) { // CRC码数组总长为原码长加上校验码码长。数组前部存放原码。校验码存放在数组 // 最后的N位。校验码长度决定于生成多项式数组0位置上的元素。 int sourceLength = sourceCodes.length; int codesLength = sourceLength + multinomial[0]; int[] crcCodes = new int[codesLength]; // 拷贝原码。 System.arraycopy(sourceCodes, 0, crcCodes, 0, sourceLength); int temp, pos; // 除法器。 for (int i = 0; i < sourceLength; i++) { // 用第i位原码和第一个寄存器值模二加。 temp = (crcCodes[sourceLength] + sourceCodes[i]) % 2;// /没有用crcCodes[sourceLength] // = 0 // 第二个寄存器及以后的所有寄存器值前移1位。 System.arraycopy(crcCodes, sourceLength + 1, crcCodes, sourceLength, multinomial[0] - 1); // 最后一个寄存器值存放计算好的输入值。 crcCodes[codesLength - 1] = temp; // 按生成多项式的值算出位置,模二加出该寄存器的值。 for (int j = index.length - 2; j > 0; j--) { pos = codesLength - multinomial[j] - 1; crcCodes[pos] = (crcCodes[pos] + temp) % 2; } } return crcCodes;      } public static void main(String[] args) throws IOException { System.out.print("Input hex data :"); StringBuffer buf = new StringBuffer(); char ch = (char) System.in.read(); while (ch != '\n' /*&& ch != ''*/) { buf.append(ch); ch = (char) System.in.read(); } int[] b = CRC16Checker.getBinary(buf.toString()); b = CRC16Checker.makeCRCCodes(b, CRC16Checker.index); for (int i = 0; i < b.length;) { for (int j = 0; j < 4; j++, i++) System.out.print(b[i]); System.out.print(' '); } System.out.println(); System.out.println("The CRC16 code is :" + CRC16Checker.toHex(b));     } } Severity and Description Path Resource Location Creation Time Id Syntax error, insert ";" to complete ReturnStatement Test/src/com/jsp/javabean CRC16Checker.java line 26 1226413351765 846 Severity and Description Path Resource Location Creation Time Id Syntax error, insert ";" to complete ReturnStatement Test/src/com/jsp/javabean CRC16Checker.java line 43 1226413351765 847 Severity and Description Path Resource Location Creation Time Id Syntax error, insert ";" to complete ReturnStatement Test/src/com/jsp/javabean CRC16Checker.java line 75 1226413351765 848 Severity and Description Path Resource Location Creation Time Id Syntax error, insert ";" to complete Statement Test/src/com/jsp/javabean CRC16Checker.java line 97 1226413351765 849

kafka 集成 kerberos ,启动kafka报错

kafka 使用kerberos协议的时候,启动kakfa的时候报zookeeper校验不通过。 错误信息如下:![图片说明](https://img-ask.csdn.net/upload/201902/02/1549098295_69981.png) kerberos的用户密钥:![图片说明](https://img-ask.csdn.net/upload/201902/02/1549098396_900993.png) kerberos的etc/krb5.conf配置信息:[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = EXAMPLE.COM default_tkt_enctypes = arcfour-hmac-md5 dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] EXAMPLE.COM = { kdc = 192.168.1.41 admin_server = 192.168.1.41 } [domain_realm] kafka = EXAMPLE.COM zookeeper = EXAMPLE.COM weiwei = EXAMPLE.COM 192.168.1.41 = EXAMPLE.COM 127.0.0.1 = EXAMPLE.COM kerberos 的var/kerberos/krb5kdc/kdc.conf的配置信息: [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] EXAMPLE.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab max_renewable_life = 7d supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal } kafka的kafka_server_jaas.conf的配置信息: KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/var/kerberos/krb5kdc/kafka.keytab" principal="kafka/weiwei@EXAMPLE.COM"; }; Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/var/kerberos/krb5kdc/kafka.keytab" principal="zookeeper/192.168.1.41@EXAMPLE.COM"; }; zookeeper_jaas.conf的配置信息: Server{ com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true useTicketCache=false keyTab="/var/kerberos/krb5kdc/kafka.keytab" principal="zookeeper/192.168.1.41@EXAMPLE.COM"; }; zookeeper.properties的新增配置信息: authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider requireClientAuthScheme=sasl jaasLoginRenew=3600000 server.properties 新增的配置信息: advertised.host.name=192.168.1.41 advertised.listeners=SASL_PLAINTEXT://192.168.1.41:9092 listeners=SASL_PLAINTEXT://192.168.1.41:9092 #listeners=PLAINTEXT://127.0.0.1:9093 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.enabled.mechanisms=GSSAPI sasl.kerberos.service.name=kafka zookeeper-server-start.sh 新增的配置信息 export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/home/shubei/Downloads/kafka_2.12-1.0.0/config/zookeeper_jaas.conf' kafka-server-start.sh 新增的配置信息: export KAFKA_OPTS='-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/home/shubei/Downloads/kafka_2.12-1.0.0/config/kafka_server_jaas.conf' 配置信息基本是这样,快过年了,小弟在线求救,再预祝大侠们新年快乐。 ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ``` ```

Modbus RTU协议TCP通信代码

空调远程控制系统 使用的是modbus4j,不成功,初次使用modbus设备 协议解析 一、读取设备状态 发送: 设备地址 功能号 起始寄存器 寄存器字节个数 CRC校验 1字节 01H 0x00 0x00 0x00 0x01 MSB LSB 返回: 设备地址 功能号 起始寄存器 数据字节个数 设备状态 CRC校验 1字节 01H 0x00 0x00 0x00 0x01 9字节 MSB LSB 测试指令: 发送:01 01 00 00 00 09 MSB LSB 返回:01 01 00 00 00 09 11 00 02 1A 02 01 00 00 01 MSB LSB 其中:11-温度17度;00-保留;02 1A 02空调状态为制冷26度(详见空调码表);01 00-输入1闭合,输入2断开;00 01-输出1断开,输出2闭合 ``` /** * 批量写数据到保持寄存器 * * @param master * 主站 * @param slaveId * 从站地址 * @param start * 起始地址的偏移量 * @param values * 待写数据 */ public static void writeRegistersTest(ModbusMaster master, int slaveId, int start, short[] values) { try { WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values); WriteRegistersResponse response = (WriteRegistersResponse) master .send(request); if (response.isException()) System.out.println("Exception response: message=" + response.getExceptionMessage()); else System.out.println("Success"); } catch (ModbusTransportException e) { e.printStackTrace(); } } ``` ``` public static void main(String[] args) throws Exception { String ip = "10.1.8.222"; int port = 100; ModbusFactory modbusFactory = new ModbusFactory(); // 设备ModbusTCP的Ip与端口,如果不设定端口则默认为502 IpParameters params = new IpParameters(); params.setHost(ip); if (502 != port) { params.setPort(port); }// 设置端口,默认502 ModbusMaster tcpMaster = null; tcpMaster = modbusFactory.createTcpMaster(params, true); try { tcpMaster.init(); writeRegistersTest(tcpMaster, 1, 0, new short[] { 0x01, 0x00, 0x00, 0x00, 0x09 }); } finally { tcpMaster.destroy(); } } ``` 我QQ:782007828,望高人指点,不胜感激

正则表达式的应用

正则表达式的应用,现有一个webservice接口,第三方调用此ws接口发送一条类型为string 内容为“(见附件的log.txt日志文档每条单独的内容记录)”的String对象。 内容的格式是由 工号 增/删/改 服务器号 通道 预定的播出时间 上传的文件夹名 应播出时长 实际上传时长 如:1018 增 143-CRC-LB6A-9 1215 03:00:15;1215 05:00:15;1215 17:00:15;1215 19:00:15;1215 20:00:15 3FRA21N 9'40" 9'41" 工号 : 1018 增/删/改 增 录播服务器号 143-CRC-LB6A-3中的6 为服务器号 播出通道 143-CRC-LB6A-9中的9 为通道 预定的播出时间 1215 03:00:15;1215 05:00:15;1215 17:00:15;1215 19:00:15;1215 20:00:15 表示12月15日的03:00:15播出、12月15日 的02:00:15 播出.... 下略 上传的文件夹名 3FRA21N 应播出时长 9'40" 实际上传时长 9'41" 要求:1书写一个javaBean类,用正则表达式匹配并分解出 工号 (增/删/改) 服务器号 通道 预定的播出时间 上传的文件夹名 应播出时长 实际上传时长 以及 校验应播出时长 和 实际上传时长 时间误差大于5s 则校验失败,否则校验成功。一共9个属性赋予该java Bena 对象。 2、请尽量使用一条正则匹配所有属性。 3、代码简洁、工整。 测试要求:在main方法中改变消息的内容 如: String str = “1018 增 145-CRC-LB6A-5 1215 02:00:15 3FRA4N 4'40" 4'40"”; 运行结果为解析的变量值结果。 我是新人,谢谢大家

socket编程,自定义协议的发送

服务器是c写的 客户端需要用java写 协议如下: 类型占一个字节 命令占一个字节 数值长度2个字节 版本号一个字节 保留3个字节 crc校验4个字节 然后是body 请问这个走tcpip协议怎么发送? 我该如何封装? 要怎么发送,怎么接受服务器返回的数据?

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

你以为这样写Java代码很6,但我看不懂

为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码。下面这一行代码(出自大牛之手)据说可以征服你的朋友,让他们觉得你写的代码很 6,来欣赏一下吧。 IntStream.range(1, 5).boxed().map(i -&gt; { System.out.print("Happy Birthday "); if (i == 3) return "dear NAME"...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

立即提问
相关内容推荐