CRC-16-CCITTを計算する。(バージョン4.78以降)
crc16 <intvar> <string> crc16file <intvar> <filename>
引数の文字列およびファイルからCRC(Cyclic Redundancy Checking)を計算する。多項式(右回り)は以下のとおり。
10001000000100001 (x16+x12+x5+x0)
計算結果は intvar 変数に数値として格納される。
crc16file でファイルが開けなかった場合は、システム変数 result に -1 が格納される。
static unsigned int crc16(int n, unsigned char c[])
{
#define CRC16POLY1 0x1021U
#define CRC16POLY2 0x8408U /* 左右逆転 */
int i, j;
unsigned long r;
r = 0xFFFFU;
for (i = 0; i < n; i++) {
r ^= c[i];
for (j = 0; j < CHAR_BIT; j++)
if (r & 1) r = (r >> 1) ^ CRC16POLY2;
else r >>= 1;
}
return r ^ 0xFFFFU;
}
str = 'this is a test string to be CRC16ed' crc16 crc str ; Display CRC16 result asHEX sprintf '0x%08X' crc messagebox inputstr 'CRC16 = ' crc16file crc 'foo.bin' if result = -1 then messagebox 'file open error' 'CRC16 = ' else sprintf '0x%08X' crc messagebox inputstr 'CRC16 = ' endif