JAVA crc8校验
娱乐之王 2013-08-30 04:39:59 ptr为数组首地址,n为数组长度
unsigned chacrc_8n(unsigned char *ptr,unsigned char n)
{
unsigned char crc = 0;
unsigned char i ,j;
const unsigned char poly = 0x8C;
for(i=0;i<n;i++){
crc^=ptr[i];
for(j=0;j<8;j++){
if(crc&1)
{
crc = (crc>>1)^poly;
}
else
{
crc = (crc>>1);
}
}
}
return crc;
}
JAVA
public static int CRC8a(byte[] aa){
int crc = 0;
for(int i = 0;i<aa.length;i++)
{
System.out.println("aa.length:"+aa.length);
crc = aa[i] ^ crc;
for(int j =0;j<8;j++){
if((crc&0x01) == 0x01){
// crc = ((crc^0x18)>>1)|0x80;
crc = (crc >> 1)^0x8C;
}else{
crc = crc >> 1;
}
}
}
System.out.println("crc:"+crc);
return crc;
}
求教:我找着别人给的C语言描述写的JAVA CRC8,但是校验结果不对;比如对方的AA07C1FFFFFFFF的校验值为EA;而我的却是6C;我先转换成字节数组:
public static byte[] getByteArray(String hexString) {
byte[] bytes;
bytes = new byte[hexString.length() / 2];
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) Integer.parseInt(hexString.substring(2 * i, 2 * i + 2), 16);
}
System.out.println("bytes:"+bytes);
return bytes;
}
然后:
byte[] bytes = CommonDriver.getByteArray(param);
String crc = Integer.toHexString(CommonDriver.CRC8a(bytes));
param为需要校验的值,打印的结果为:6c