Блог IT для Windows

Всё для Windows, софт, исходники

Расчёт Crc для файлов.txt на С++

E-mail Печать PDF
(2 голоса, среднее 5.00 из 5)

Разрабатываемая программа была написана в среде Builder C++ 6. В данной программе рассчитывается  CRC-16 standart CCITT с применением полинома 1021= (x^16 + x^12 + x^5 + 1) и CRC-32 с применением полинома EDB88320UL= (x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11+ x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1) файла text.txt. Пользователю будет предложено ввести английское слово или цифры, затем сообщение пользователя будет передано в файл text.txt и после чего будет вывод на экран CRC-16 и CRC-32 изменённого файла text.txt.  Далее информация, выведенная на экран будет продублирована в файл report.txt.

Листинг программы:

/*Программа расчёта Crc32 для файлов.txt*/
#include <stdio.h>//необходимо для printf
#include <conio.h>//необходимо для getch
#include <string.h>//необходимо для strlen
#define FNAME "text.txt"//макрос(константа)
/*Описываем функцию расчёта Crc16 standart CCITT
с применением полинома 1021=x^16 + x^12 + x^5 + 1*/
unsigned short Crc16(unsigned char *buf, unsigned short len)
{
unsigned short crc = 0xFFFF;//переменная 16 бит = 2 байта
unsigned char i; //переменная 8 бит = 1 байт
while (len--)// проверка условия продолжения
{
crc ^= *buf++ << 8;
for (i = 0; i < 8; i++)//цикл перебора полинома
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
return crc;//конец функции расчёта Crc16
}
/*Описываем функцию расчёта Crc32
с применением полинома EDB88320UL=
x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11
+ x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1*/
unsigned long Crc32(unsigned char *buf, unsigned long len)
{
//инициализируем таблицу расчёта Crc32
unsigned long crc_table[256];//массив 32 бита = 4 байтам
unsigned long crc;//переменная 32 бита = 4 байтам
for (int i = 0; i < 256; i++)//инициализируем цикл массива
{
crc = i;
for (int j = 0; j < 8; j++)//цикл перебора полинома
crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;
crc_table[i] = crc;};
crc = 0xFFFFFFFFUL;
while (len--)// проверка условия продолжения
crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8);
return crc ^ 0xFFFFFFFFUL; //конец функции расчёта Crc32
};
/*Создаём файл text.txt для записи  и обработки*/
int main()
{
char c[50];//массив для вводимого текста
FILE *f = fopen("text.txt", "w");//Открыли файл text.txt для записи
FILE *fp = fopen("report.txt", "w");//Открыли файл report.txt для записи
if ((f = fopen("text.txt", "w"))==NULL)//Если файл невозможно открыть
{
printf ("\nError = Nevozmozchno otcrjt' fail\n");//то выдаём сообщение
getch(); //задерживаем программу
return 0;//выходим из программы
}
else //
{
//выдаём  следующие сообщения
printf("\nBuilder C++ 6\n");
printf("\nProgramma sostavlenija CRC-coda\n");
printf("\nVvedite english text ili tsifrj:\n");
scanf("%s",&c);//вводим текст
fprintf(f, "%s", c);//передаём введённый текст в файл text.txt
fclose(f); //Файл text.txt закрыли
}
if ((f = fopen("text.txt", "rt"))==NULL)//Если файл невозможно открыть
{
printf ("\nError = Nevozmozchno otcrjt' fail\n");//то выдаём сообщение
getch(); //задерживаем программу
return 0;//выходим из программы
}
else//иначе
unsigned long Crc32(unsigned char *buf, unsigned long len);
char buf[4096]; int len;
fgets(buf, sizeof(buf), f);
len = strlen(buf);
//Выводим на консоль имя файла и его CRC-16 и CRC-32 printf("\nCRC-16 standart CCITT(nex) faila %s  = %x\n",FNAME,Crc16(buf,len)); printf("\nCRC-32 standart IEEE 802.3 faila %s  = %p\n",FNAME,Crc32(buf,len)); //передаём выведенный текст в файл report.txt fprintf(fp, "REPORT File %s", FNAME); fprintf(fp, "\nCRC-16 standart CCITT(nex) = %x\n",Crc16(buf,len)); fprintf(fp, "CRC-32 standart IEEE 802.3 = %p\n",Crc32(buf,len)); fclose(f);//Файл text.txt закрыли fclose(fp);//Файл report.txt закрыли getch();  //задержка программы return 0; //конец программы }
 

Добавить комментарий


Защитный код
Обновить

Экспорт RSS

feed-image RSS

Праздники и история IT

Кто на сайте

Сейчас 35 гостей онлайн

Статистика

Яндекс.Метрика
Анализ веб сайтов

Поиск


Голосования

Какой операционной системой вы пользуетесь
 

Наш опрос

Каким браузером вы пользуетесь
 
Каким антивирусом вы пользуетесь