CRC-32を計算する。
crc32 <intvar> <string> crc32file <intvar> <filename>
引数の文字列およびファイルからCRC(Cyclic Redundancy Checking)を計算する。多項式(右回り)は以下のとおり。
100000100110000010001110110110111 (x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x1+x0)
計算結果は intvar 変数に数値として格納される。
crc32file でファイルが開けなかった場合は、result 変数に -1 が格納される。
#define CRCPOLY2 0xEDB88320UL /* 左右逆転 */
static unsigned long crc2(int n, unsigned char c[])
{
int i, j;
unsigned long r;
r = 0xFFFFFFFFUL;
for (i = 0; i < n; i++) {
r ^= c[i];
for (j = 0; j < CHAR_BIT; j++)
if (r & 1) r = (r >> 1) ^ CRCPOLY2;
else r >>= 1;
}
return r ^ 0xFFFFFFFFUL;
}
str = 'this is a test string to be CRC32ed'
crc32 crc str
; Display CRC32 result asHEX
sprintf '0x%08X' crc
messagebox inputstr 'CRC32 = '
crc32file crc 'foo.bin'
if result = -1 then
messagebox 'file open error' 'CRC32 = '
else
sprintf '0x%08X' crc
messagebox inputstr 'CRC32 = '
endif