Блог IT для Windows

Все про Windows, программное обеспечение, информационную безопасность, программирование

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

E-mail Печать PDF
(10 голоса, среднее 4.60 из 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; //конец программы
}


 

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


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

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

Кто на сайте

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

Статистика

Яндекс.Метрика

Экспорт RSS

feed-image RSS

Поиск по сайту

Голосования

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

Мы в Яндекс.Дзен

Блог IT

Мы Вконтакте


Форум программистов и сисадминов Киберфорум