导航:首页 > 源码编译 > 字节数组的crc8算法

字节数组的crc8算法

发布时间:2022-12-09 23:44:24

1. C语言实现CRC校验

把我知道的说一下:
码流后面加8个0可以用移位得到(码流<<8;)
单次异或运算可以用运算符:^(运算符两边为常数)
由于你校验的是5个字节,且要多次异或运算,所以得借助数组,或其它的数据结果才能完成。

最后问一下你是做硬件的吗

2. CRC8算法疑问

信息大,会分段传输,每段都有自己的crc校验,然后在接收方组合。crc相同的情况叫做crc碰撞,由于crc只有8位,所以发生碰撞的概率比较高,所以一般需要安全性比较高的地方都是用md5或sha1校验的。

3. 求java的 crc8算法方法

你的意思就翻译一下,是吗:
static char crc8fun ( char in, char prest)
{
int loop;
char out;
char crc_pol=0xb8; /*多项式*/
out = in^prest;
for(loop=0;loop<8;loop++){
if(out&0x01){
out=(out>>1)^crc_pol;
}else{
out=(out>>1);
}
return out;
}
}

4. java中CRC算法是个什么东东

CRC算法实现有2种方法,一、查表法,二、直接计算,查表法的计算速度相对来说比较快,本人介绍的方法是直接计算法,用了2种方法实现,都是面向对象进行算法的封装。
package com.wms.serial;

/**
* @author lino
* @version 2006/08/25
*/
public class CRC16{
public int value;

public CRC16()
{
value = 0;
}

/** update CRC with byte b */
public void update(byte aByte)
{
int a, b;

a = (int) aByte;
for (int count = 7; count >=0; count--) {
a = a << 1;
b = (a >>>8) & 1;
if ((value & 0x8000) != 0) {
value = ((value << 1) + b) ^ 0x1021;
} else {
value = (value << 1) + b;
}
}
value = value & 0xffff;
return;
}

/** reset CRC value to 0 */
public void reset()
{
value = 0;
}

public int getValue()
{
return value;
}

public static void main(String[] args) {
CRC16 crc16 = new CRC16();
byte[] b = new byte[]{
//(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72
(byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE
,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00
,(byte) 0x00,(byte)0x00
};
for (int k = 0; k < b.length; k++)
{
crc16.update(b[k]);
}
System.out.println(Integer.toHexString(crc16.getValue()));
System.out.println(Integer.toHexString(b.length));
}
}

package com.wms.serial;

public class CRC162 {
public static final void main(String[] args){
CRC162 crc16 = new CRC162();
byte[] b = new byte[]{
//(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72
(byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE
,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00
,(byte) 0x00,(byte)0x00
};
System.out.println(Integer.toHexString(crc16.encode(b)));
//再把这个2f49替换成b数组的最后两个字节的数组,生成一个新的数组b2
byte[] b2 = new byte[]{
//(byte) 0xF0,(byte)0xF0,(byte)0xF0,(byte)0x72
(byte) 0x2C,(byte)0x00,(byte)0xFF,(byte)0xFE
,(byte) 0xFE,(byte)0x04,(byte)0x00,(byte)0x00
,(byte) 0x2f,(byte)0x49
};
System.out.println(Integer.toHexString(crc16.encode(b2))); //算出来是 0

//你可以自已构造一些byte进行加解密试试
}

public short encode(byte[] b){
short CRC_x = 0;
int pp = 65536; // 1<<16;
int pp2 = 69665; // (1<<16) + (1<<12) + (1<<5) + 1
for(int i=0;i<b.length;i++){
for(int j=0;j<8;j++){
CRC_x = (short)((CRC_x<<1) + (((b[i]<<j)&0x80)>>7));
if((CRC_x/pp) == 1){
CRC_x=(short)(CRC_x^pp2);
}
}
}
return CRC_x;
}
}

阅读全文

与字节数组的crc8算法相关的资料

热点内容
压力大的时候你都是怎么解压 浏览:676
python爬虫入门表 浏览:127
十进制15的源码 浏览:477
python如何利用配置文件 浏览:112
魔兽ai命令 浏览:535
程序员离职代码 浏览:653
钉钉群如何建立文件夹 浏览:107
思科网络服务器地址 浏览:327
车贷提前还款怎么算法 浏览:349
红米如何关闭app自动更新 浏览:964
如何下载云服务器到电脑 浏览:467
世界秩序基辛格pdf 浏览:363
单片机怎么集成 浏览:511
程序员被拜金女骗1万 浏览:984
安卓手机拍照为什么总是抖动 浏览:253
汽车车载app如何下载 浏览:27
python复合型数据类型 浏览:379
登录服务器发生错误怎么回事 浏览:274
松下空气能压缩机 浏览:939
万能源码播放器 浏览:970