⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc32.cpp

📁 本书通过实例介绍了嵌入式编程的方法与技巧书中例子具有实用性
💻 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 + -