📄 crc32.cpp
字号:
#include <iostream.h>
#include <cassert.h>
#include <string.h>
unsigned long CRC32 = 0x00000000L;
unsigned long GenPolynomial = 0x04c11db7L; // Divisor for CRC32 Polynomial
void bitByBit(bool bit);
void main()
{
unsigned int MsgLength,OrgLength,Shift;
std::string SampleMsg ("Hello World");
OrgLength = SampleMsg.length();
std::cout<<"Actual Message : "<<SampleMsg<<std::endl<<std::endl;
SampleMsg.resize(OrgLength + 4); // Appending 32(8*4) 0 bits to the Message (for CRC32)
MsgLength = SampleMsg.length();
std::cout<<"Message After Appending 32 '0' bits : ";
for(int i = 0;i<MsgLength;++i)
{
unsigned char ch = SampleMsg[i];
unsigned char mask = 0x80;
for (int j = 0; j < 8; ++j)
{
bitByBit(ch & mask);
mask >>= 1;
}
std::cout<<" ";
}
std::cout<<std::endl<<std::endl<<"Calculated CRC :0x"<<std::hex<<CRC32;
std::cout<<std::endl<<std::endl<<std::endl;
std::cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<std::endl<<std::endl;
Shift = 32;
for (int k = 0; k < 4; ++k)
{
Shift -= 8;
SampleMsg[OrgLength + k]
= static_cast<unsigned char> (CRC32 >> Shift);
}
CRC32 = 0;
MsgLength = SampleMsg.length();
std::cout<<"Message To be Transmited (Actual Message + CRC) : ";
for(int l = 0;l<MsgLength;++l)
{
unsigned char ch = SampleMsg[l];
unsigned char mask = 0x80;
for (int m = 0; m < 8; ++m)
{
bitByBit(ch & mask);
mask >>= 1;
}
std::cout<<" ";
}
std::cout<<std::endl<<std::endl<<"ReCalculated CRC :0x"<<std::hex<<CRC32;
std::cout<<std::endl<<std::endl<<std::endl;
}
void bitByBit(bool bit)
{
std::cout<<bit;
bool firstBit = (CRC32 & 0x80000000L);
CRC32 = CRC32 << 1;
CRC32 = CRC32^bit;
if (firstBit)
{
CRC32 = CRC32 ^ GenPolynomial;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -