读书人

哪位高手有CRC16校验教材 给小弟我一份

发布时间: 2012-03-02 14:40:29 作者: rapoo

谁有CRC16校验教材 给我一份 谢谢
谁有CRC16校验教材 给我一份 谢谢
邮箱
wuming19821016@sohu.com

[解决办法]
http://www.hlib.cn/article/program/7087.asp
[解决办法]
//!CRC16生成计数器类
/**
* 这个类主要是保存CRC16生成状态,并可以在原来的CRC16基础上继续生成CRC16
* 并且可以重置CRC16状态,从面重新生成CRC16
* @par sample
* @code
* char v[] = { 'a ', 'b ', 'c ', 'd ', 'e '};
* XDWord vCRC16 = XCRC::CRC16(v,5);
* XCRC16Counter aCrc;
* aCrc.MakeCRC(v,2);
* aCrc.MakeCRC(v+2,3);
* 这个时候 vCRC32 == aCRC.getCRC()
* @endcode
* @version 3.0
* @date 2006-12-31
*/
class XCRC16Counter
{
public:
//!CRC16默认构造函数
XCRC16Counter()
:m_CRC(0)
{}
//!CRC16默认Copy构造函数
/**
* @param aCRC 被构造的对象
*/
XCRC16Counter(const XCRC16Counter & aCRC)
:m_CRC(aCRC.m_CRC)
{}
//!构造函数
/**
* @param aCRC 初始的CRC值
*/
XCRC16Counter(XWord aCRC)
:m_CRC(aCRC)
{}
//!默值的赋值函数
/**
* @param aCRC 初赋值的对象
*/
XCRC16Counter & operator = (XCRC16Counter & aCRC)
{
m_CRC = aCRC.m_CRC;
return *this;
}
//!设置当前CRC的赋值
/**
* @param aCRC 新的CRC值
* @return 返回当前对象的引用
*/
XCRC16Counter & operator = (XWord & aCRC)
{
m_CRC = aCRC;
return *this;
}
//!重设CRC32的值
/**
* 重设后,这个值将处理初始状态
*/
void Reset()
{
m_CRC = 0;
}
//!生成CRC
/**
* 计算这个字节的CRC
* @param aByte 初计算的字节
*/
void MakeCRC(XByte aByte)
{
MakeCRC(&aByte,1);
}
//!根据指定的数据计算CRC
void MakeCRC(const XByte * aData,int aLength);

//!根据静态字节数组计算CRC
/**
* @param aArray 被计算的数组
*/
void MakeCRC(const XArray <XByte> & aArray)
{
MakeCRC(aArray.getData(),aArray.getLength());
}
//!根据动态字节数组计算CRC
/**
* @param aArray 被计算的数组
*/
void MakeCRC(const XDynamicArray <XByte> & aArray)
{
MakeCRC(aArray.getData(),aArray.getLength());
}
//!取当前对象的CRC值
/**
* @return 返回当前对象CRC的值
*/
XWord getCRC() const
{
return m_CRC;
}
//!设置当前对象的CRC值
/**
* @param v 要设成的CRC值
*/
void setCRC(XWord v)
{
m_CRC = v;
}
//!重载XWord转换运算,直接返回C当前对象的RC值
/**
* @return 返回当前对象CRC的值
*/
operator XWord() const
{
return m_CRC;
}
private:
//!存放CRC16的计数器
XWord m_CRC;
};
/**
* 计算这个指定数据的CRC值
* @param aData 数据的开始指针
* @param aLength 计算数据的长度
*/
void XCRC16Counter::MakeCRC(const XByte * aData,int aLength)
{
if(XCRC::m_Init16) XCRC::initTable16();
if( aLength > 0 )
{
for(int i=aLength; i> 0; i--)
{
m_CRC = (XWord)((m_CRC < < 8) ^ XCRC::m_crcTable16[((m_CRC > > 8) ^ (*aData++)) & 0xff]);
}
}
}

[解决办法]
焦 鸡毛?

读书人网 >C++ Builder

热点推荐