From: Ojala Pasi 'Albert' (albert_at_cs.tut.fi)
Date: 2004-04-13 09:09:24
> Well, interesting to me. I'm not a whiz at ML, and I found the
> following code
>
> It's from the QLink disk (yes, that disk...) I know it is a checksum,
> but I can;t figure out what math it is trying to do.
>
> The sequence 7f,7f,23,05,09 generates checksum with bcff=82,bd00=3e
>
> I was wondering if someone could help me with this. The end result will
> be in C, but I can do that myself if I can just figure out the algorithm.
Seems to be 16-bit CRC. Something like:
unsigned short CRC = 0;
unsigned short CalcCRC(unsigned char byte) {
int i;
for (i=0;i<8;i++) {
unsigned short tmp = (byte&1)^CRC;
byte >>= 1;
if (tmp & 1) {
tmp >>= 1;
tmp ^= 0xa001;
} else {
tmp >>= 1;
}
CRC = tmp;
}
return CRC;
}
The value 0xa001 controls the CRC polynomial used.
At least your test case generates the same CRC.
-Pasi
--
"Back in the bad old days as a warning to criminals judges would order
malcontents to be hung by their ankles: heels over head. The phrase came
to mean a state of helplessness, confusion. Now that I think of it, that
*is* being in love." -- Hill in "Oz", season 3
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.