CRC32封装

本文介绍了如何在C#的UDSServices命名空间中创建一个名为Crc32Helper的类,该类提供了计算CRC32校验和的方法,包括处理字节数组、数据字节反转和最终异或操作。
摘要由CSDN通过智能技术生成

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UDSServices
{
public class Crc32Helper
{
public static uint GetCRC32(byte[] buffer, bool reverseDataBytes, bool reverseResultBeforeFinalXor, uint truncatedPolynomial = 0x04C11DB7, uint crc = 0xFFFFFFFF, uint finalXorValue = 0xFFFFFFFF)
{
int length = buffer.Length;
byte data;
//uint crc = 0xFFFFFFFF; //初始值(16位举个例子0xFFFF,8位0xFF)
int i;
for (int j = 0; j < length; j++)
{
data = buffer[j];
if (reverseDataBytes)
{
data = (byte)Reverse8(data); //输入是否反转,如果不需要则这句注释掉;
}
crc = (uint)(crc ^ (data << 24)); //32位左移24位,16位左移8位,8位左移0位;
for (i = 0; i < 8; i++)
{
if ((crc & 0x80000000) == 0x80000000)//16位 0x8000 8位 0x80
{
crc = (crc << 1) ^ truncatedPolynomial;//多项式,没什么好说的;
}
else
{
crc <<= 1;
}
}
}
if (reverseResultBeforeFinalXor)
{
crc = Reverse32(crc);//输出是否需要反转,注意如果是16位则调用Reverse16(crc),8位调用Reverse8(crc)
}
crc = crc ^ finalXorValue;// xor 异或值(与上面初始值类似,16位 0x0000 8位 0x00;
return crc;
}
private static uint Reverse32(uint data)
{
byte i;
uint temp = 0;
for (i = 0; i < 32; i++)
{
temp |= ((data >> i) & 0x01) << (31 - i);
}
return temp;
}

    private static uint Reverse16(uint data)
    {
        byte i;
        uint temp = 0;
        for (i = 0; i < 16; i++)
        {
            temp |= ((data >> i) & 0x01) << (15 - i);
        }
        return temp;
    }

    private static byte Reverse8(byte data)
    {
        byte i;
        byte temp = 0;
        for (i = 0; i < 8; i++)
        {
            temp = (byte)(temp | (((data >> i) & 0x01) << (7 - i)));
        }
        return temp;
    }
}

}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值