|
/*
「質問専用掲示板」も見たけど、コンパイル可能なソースコードを掲載してください。
お試しってことで、下記のPGと、3年前σ(^^)が書いたPGに食わせてみた。
エサは下記の内容が含まれているテキストファイル[A.txt]
-----ここから-----
20031028
19781223
20450112
19800512
-----ここまで-----
れいが産の:155701BA Windows2000/VC++6.0sp5
私のコード:612CDB61 Windows98/LSI-C86 3.30C試食版
であった。
私のコードは下記にて公開しているものをDLして確認できる
http://www.atmark.gr.jp/~s2000/rapt/freesoft/index.html#CRC_LZH
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned long g_Crc32_Table[257];
void init()
{
unsigned long i, k, value;
for(i = 0; i < 256; ++i){
value = i;
for(k = 0; k < 8; ++k){
if(value & 1)
value = 0xEDB88320L ^ (value >> 1);
else
value >>= 1;
}
g_Crc32_Table[i] = value;
}
}
unsigned long calc(unsigned char *pData, unsigned long nCount)
{
unsigned long crc = 0;
size_t index;
for(; nCount; --nCount){
index = (crc ^ *pData) & 0xFF;
crc = (crc >> 8) ^ g_Crc32_Table[index];
++pData;
}
return crc;
}
int main(int argc, char *argv[])
{
FILE *fp = NULL;
unsigned char buff[1+BUFSIZ] = {0};
unsigned long crc, count;
if (argc < 2){
fprintf(stderr, "ファイル名を指定してください\n");
exit(1);
}
if ((fp = fopen(argv[1], "rb")) == NULL){
fprintf(stderr, "%s ファイルが開けません\n", argv[1]);
exit(1);
}
fgets(buff, BUFSIZ, fp);
fclose(fp);
count = strlen(buff);
init();
crc = calc(buff, count);
printf("String : [%s]\nCRC32 : [%X]\n", buff, crc);
return 0;
}
|