
LRI64
附录B. C-为例计算或检查CRC16
根据ISO / IEC 13239
循环冗余校验(CRC)是calculat-
编包含在邮件中的所有数据,从
通过对数据的末尾开始的标志。这
CRC是从VCD用来LRI64从LRI64
到VCD 。
为了对抗转向错误添加额外的保护,一
所计算的CRC进一步转化为
进行。的计算的补
表19. CRC定义
CRC定义
CRC类型
ISO / IEC 13239
长
16位
多项式
X
16
+ X
12
+ X
5
+ 1
= Ox8408
方向
落后
预设
FFFFH
残留
F0B8h
CRC为附连到该消息的值
传输。
对于收到的邮件检查2 CRC
字节通常还包括在重新计算,
为便于使用。在这种情况下,给定的预期
值所产生的CRC的残基
F0B8h
CRC计算示例
这个例子在C语言中示出了一种方法,
计算CRC对一组给定的字节的
包括消息。
#定义POLYNOMIAL0x8408 // X ^ 16 + X ^ 12 + X ^ 5 + 1
#定义PRESET_VALUE0xFFFF
#定义CHECK_VALUE0xF0B8
#定义NUMBER_OF_BYTES4 //例: 4个数据字节
#定义CALC_CRC1
#定义CHECK_CRC0
无效的主要( )
{
unsigned int类型current_crc_value ;
无符号字符array_of_databytes [ NUMBER_OF_BYTES + 2] = { 1,2, 3,4, 0x91的信息, 0x39 };
INT
number_of_databytes = NUMBER_OF_BYTES ;
INT
calculate_or_check_crc ;
INT
I,J ;
calculate_or_check_crc = CALC_CRC ;
// calculate_or_check_crc = CHECK_CRC ; //这可能是另一个例子
如果( calculate_or_check_crc == CALC_CRC )
{
number_of_databytes = NUMBER_OF_BYTES ;
}
其他
// CRC校验
{
number_of_databytes = NUMBER_OF_BYTES + 2 ;
}
current_crc_value = PRESET_VALUE ;
对于( i = 0 ;我< number_of_databytes ;我+ + )
{
current_crc_value = current_crc_value ^ ( ( unsigned int类型) array_of_databytes [I ] ) ;
对于( J = 0 ; < 8 ; J ++ )
{
如果( current_crc_value & 0×0001 )
34/38