반응형
CRC 검사중에 CRC16CCITT도 여러종류가 있습니다.
위 링크를 따라 가 보시면 여러종류의 crc 계산을 하실 수 있습니다.
그리고 아래는 JAVA용 crc 코드입니다.(netty라서 ByteBuf를 받았는데 이부분은 수정하시면 될듯)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | private static final int POLYNOMIAL = 0x1021; private static final int PRESET_VALUE = 0x0000; public static int crc16Xmodem(ByteBuf chkdata) { int length; chkdata.readerIndex(1); int crc = PRESET_VALUE; for (int i = 0; i < length; i++) { int b = (chkdata.readByte() & 0xff); for (int j = 0; j < 8; j++) { boolean bit = ((b >> (7 - j) & 1) == 1); boolean c15 = ((crc >> 15 & 1) == 1); crc <<= 1; if (c15 ^ bit) crc ^= POLYNOMIAL; } } crc &= 0xffff; return crc; } | cs |
그리고 Line 6 : 여긴 계산할 바이트 버퍼의 수입니다.
Line 1과 Line 2는 원하는 CRC종류에 따라 변경해 주시면 됩니다.
(출처 : http://stackoverflow.com/questions/4455257/crc16-checksum-hcs08-vs-kermit-vs-xmodem)
저는 XModem이라 polynomial은 0x1021, initial value(preset value)는 0x0000을 사용하였습니다.
반응형
'Study > JAVA' 카테고리의 다른 글
JAVA 프로젝트 JAR로 실행하기!! (1) | 2017.02.23 |
---|---|
timestamp로 SimpleDateFormat사용하기 (1) | 2016.10.11 |
JAVA에서 MySQL 사용하기2 - 사용예제 (0) | 2016.10.11 |
JAVA에서 MySQL 사용하기1-준비 (0) | 2016.10.11 |
FrogJmp (0) | 2016.07.12 |