我使用这个简单的函数来计算给定文件的CRC校验和:
long i, j = 0;
int k = 0;
uint crc = 0xFFFFFFFF;
FileInfo file_info = new FileInfo(file);
byte[] file_buffer = new byte[32768];
FileStream file_stream = new FileStream(@file, FileMode.Open);
while ((i = file_stream.Read(file_buffer, 0, file_buffer.Count())) > 0)
{
for (j = 0; j < i; j++)
{
uint before = crc;
k = (int)((crc ^ file_buffer[j]) & 0x000000FFL);
uint after = (uint)((crc >> 8) & 0x00FFFFFFL) ^ crc32_table[k];
crc = after;
uint test = (uint)((crc << 8) & 0x00FFFFFFL) …Run Code Online (Sandbox Code Playgroud) 背景:
我有一段1024字节的内存.最后1020个字节将始终相同.前4个字节将改变(产品的序列号).我需要CRC-16 CCITT为整个内存部分计算(0xFFFF起始,0x1021掩码)CRC_WHOLE.
题:
是否可以仅计算前4个字节的CRC CRC_A,然后应用如下所示的函数来计算完整的CRC?我们可以假设CRC_B已知最后1020字节的校验和.
CRC_WHOLE = XOR(CRC_A, CRC_B)
Run Code Online (Sandbox Code Playgroud)
我知道这个公式不起作用(尝试过),但我希望存在类似的东西.