Диар ол..
у меня есть чудовищный код, доставшийся мне от индусов, который должен считать crc16. у меня есть класс, считающий crc и когда я увидел *это*, я заплакал..
я мало знаком с темплэйтами и прочим в vc++, поэтому я не понимаю совершенно как работает этот код.. помогите, пожалуйста разобраться:
WORD CBZXMessage::GetCRC(const CString &sFName, WORD nSerial,long newparameter)
{
USES_CONVERSION;
union
{
WORD uWholeWord;
struct
{
BYTE Low;
BYTE High;
}
ucByte;
}
uCRC;
deque<BYTE> byteQ;
BYTE bByte;
bool bRetVal = false;
WORD nFileCRC = 0;
uCRC.uWholeWord = nSerial;
ifstream ifs;
ifs.open(T2CA(sFName), ios_base::binary );
while ( ios::goodbit == ifs.rdstate())
{
char c;
ifs.get( c);
bByte = c;
byteQ.push_back( bByte);
if( byteQ.size() > newparameter) // 7 == magic number ( last char in file is read twice cos ios::eofbit
// is only set when a read fails + 4 for CRC + 0x0d + 0x0a)
{
uCRC.ucByte.Low ^= byteQ.front();
byteQ.pop_front();
for ( int j = 0; j < 8; j++) /* do 8 times */
{
WORD uFlag = uCRC.uWholeWord & 1; /* shift seed one bit to right */
uCRC.uWholeWord = uCRC.uWholeWord >> 1;
if (uFlag) /* if a 1 bit was shifted out */
{
uCRC.uWholeWord ^= 0xA001; /* exclusive or A001 to seed */
}
}
}
}
ifs.close();
return uCRC.uWholeWord;
}
newparameter = 7 всегда, nSerial = 0
где используются прочитаные из файла байты? для чего нужны ксоры ucByte.Low, если идет анализ только uWholeWord?.. Check для этой функции: BA04.
Please HELP!!!
29.03.08 21:46: Перенесено модератором из '.NET' — AndrewVK