导航:首页 > 源码编译 > crc16算法

crc16算法

发布时间:2022-02-23 00:32:53

⑴ crc-16算法的vb实现问题

为了第二步的取反和第三步的取指纹。

⑵ crc16的算法

#define
CRC16_POLYNOMIAL
0x1021
//
CRC_16校验方式的多项式.
typedef
unsigned
char
uchar;
typedef
unsigned
int
uint;
typedef
unsigned
long
ulong;
typedef
enum
tagBoolean
{
FALSE,
TRUE
}
bool;
ulong
g_ulTable[256];
//
CRC_16方式校验的初始化函数,
计算CRC_16余数表.
void
_far
CRC16Init(void)
{
uint
nRemainder;
int
n,
m;
ulong
*pulTable
=
g_ulTable;
for(n
=
0;
n
<
256;
n
++)
{
nRemainder
=
(uint)n
<<
8;
for(m
=
8;
m
>
0;
m
--)
{
if(nRemainder
&
0x8000)
{
nRemainder
=
(nRemainder
<<
1)
^
CRC16_POLYNOMIAL;
}
else
{
nRemainder
=
(nRemainder
<<
1);
}
}
*(pulTable
+
n)
=
nRemainder;
}
}
//
以CRC_16方式计算一个数据块的CRC值.
//
pucData
-
待校验的数据块指针.
//
nBytes
-
数据块大小,
单位是字节.
//
返回值是无符号的长整型,
其中低16位有效.
ulong
_far
CRC16Calc(uchar
*pucData,
int
nBytes)
{
uint
nRemainder,
nRet;
int
n;
uchar
index;
ulong
*pulTable
=
g_ulTable;
nRemainder
=
0x0000;
for(n
=
0;
n
<
nBytes;
n
++)
{
index
=
(uchar)CRCBitReflect(*(pucData
+
n),
8)
^
(nRemainder
>>
8);
nRemainder
=
(uint)*(pulTable
+
index)
^
(nRemainder
<<
8);
}
nRet
=
(uint)CRCBitReflect(nRemainder,
16)
^
0x0000;
return(nRet);
}
//
反转数据的比特位,
反转后MSB为1.
//
反转前:
1110100011101110
0010100111100000
//
反转后:
1111001010001110
1110001011100000
ulong
_far
CRCBitReflect(ulong
ulData,
int
nBits)
{
ulong
ulResult
=
0x00000000L;
int
n;
for(n
=
0;
n
<
nBits;
n
++)
{
if(ulData
&
0x00000001L)
{
ulResult
|=
(ulong)(1L
<<
((nBits
-
1)
-
n));
}
ulData
=
(ulData
>>
1);
}
return(ulResult);
}

⑶ CRC 16 校验,如何计算多项式

方法如下:
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
1.设置CRC寄存器,并给其赋值FFFF(hex)。
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。 3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。
7.最终CRC寄存器的内容即为CRC值。
CRC(16位)多项式为 X16+X15+X2+1,其对应校验二进制位列为1 1000 0000 0000 0101。

⑷ CRC16检验算法

public class CRC16 {
public static String getData(String data){
byte[] b=data.getBytes();
short crc=0;
for(int n=0;n<b.length;n++){
for (char i = 0x80; i != 0; i >>= 1)
{
if ((crc&0x8000) != 0)
{
crc <<= 1;
crc ^= 0x1021;
}
else
{
crc <<= 1;
}
if ((b[n]&i) != 0)
{
crc ^= 0x1021;
}
}
}
return Integer.toHexString(crc & 0xFFFF);
}
public static void main(String[] args) {
System.out.println(CRC16.getData("1234567890"));
}
}这个肯定可以 我自己测试通过的

⑸ 请教一个crc16校验算法的问题:程序每句话是什么意思,做什么用的,急用!!谢谢~~

以下内容可能对你有用呀。好好看看就明白了。
CRC校验
采用CRC-16,即2字节冗余循环码CRC,低字节在前。CRC码由发端计算,放置于发送消息帧的尾部,接收端再重新计算接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,若不符则表明出错。CRC码的计算包括整个消息内容,计算时只用8位数据位,而起始位、停止位及可能的校验位均不参与CRC计算。
CRC校验可以100%检测出所有奇数个随机错误。CRC-16校验可以检测出长度小于等于16的突发错误,可以保证在1014 bit码元中只含有1位未被检测出的错误。CRC-16的具体算法有多种,以下是一个例子。
1.置16位寄存器为全1,作为CRC寄存器。
2.把一个8位数据与16位CRC寄存器的低字节相异或,把结果放于CRC寄存器中。
3.把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位(移出位)。
4.如果最低位为0,重复③(再移位);如果最低位为1,CRC寄存器与多项式A001H(1010 0000 0000 0001)进行异或。
5.重复③、④,直到右移8次,这样整个8位数据全部进行了处理。
6.重复②-⑤,进行下一个8位数据的处理。
7.将一帧的所有数据字节处理完后得到CRC-16寄存器。
8.将CRC-16寄存器的低字节和高字节交换,得到的值即为CRC-16码。

⑹ CRC16校验码如何计算

首先G(X)=X3+X+1可以得出G(x)=1011[G(x)中的1就是二进制第0位为1,X就是第一位为1,没有X^2,所以第二位为0,X^3则第三位为1。所以就是1011]

M(x)=0011M(x)*x3=0011000

M(x)*x3/G(x)的余数是101所以R(X)=101

CRC码为:M(x)*x3+R(x)=0011000+010=0011010

在计算机网络通信中

运用CRC校验时相对于其他校验方法就有一定的优势。CRC可以高比例的纠正信息传输过程中的错误,可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。由于CRC算法检验的检错能力极强,且检测成本较低,因此在对于编码器和电路的检测中使用较为广泛。

以上内容参考:网络-CRC

⑺ CRC码的计算方法

给信息码补5个0,然后去除多项式,余数就是较验码

⑻ crc16的校验码的算法

方法如下:
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。

⑼ crc16校验码怎么算

coins[3]+coins[4]+coins[5]) {
if(coins[0]+coins[3] == coins[1]+coins[4])
compare(coins, 5, 2, 0);
else if(coins[0]+coins[3] > coins[1]+coins[4])
compare(coins, 3, 1, 0);
if(coins[0]+coins[3] < coins[1]+coins[4])
compare(coins, 4, 0, 1);

⑽ 已知数据和CRC16的校验码,求该校验码的算法.

这个介绍的很详细, 你参考一下:
http://www.cnblogs.com/Msisiterc/archive/2011/12/20/2294910.html

阅读全文

与crc16算法相关的资料

热点内容
liunx安装androidsdk 浏览:595
显卡云服务器对比知乎 浏览:178
怎么判断雨棚旁柱子是否加密 浏览:397
android挂号源码 浏览:397
买车有什么app可以查看车型 浏览:1002
如何保证公司服务器安全 浏览:586
如何在本地iis服务器写代码 浏览:938
剑灵电信服务器怎么样 浏览:652
骨科手术学pdf 浏览:772
监控服务器与交换机需要什么技术 浏览:58
为什么文件解压txt后乱码 浏览:785
力学轴向拉伸和压缩 浏览:115
一点公益系统源码 浏览:1003
python怎么创建新文本 浏览:963
redis操作命令 浏览:283
安卓加密后输入密码黑屏 浏览:527
如何让安卓没有升降按键 浏览:769
网易服务器炸了游戏怎么办 浏览:814
会逐年减产的加密货币有哪些 浏览:779
吉祥码安卓手机怎么能敲出来 浏览:806