Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2010, 01:00   #1
farewe11
Пользователь
 
Регистрация: 31.05.2010
Сообщений: 15
Лампочка Подсобите разобрать код. Непонятно, что в нём происходит..

Итак, у нас есть программа для расчета CRC8. Помните такую штуку?
Вот она:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#define P 0x101 //обозначаем полином-делитель

int number_bit=0;
int byte;

int bit(FILE *fp){
if(number_bit==0){
if((byte=getc(fp))!= EOF) { number_bit=1; return(byte>>7); }
else return EOF; }
else{
int i=(byte>>(7-number_bit))&1;
number_bit=(number_bit+1)%8; return i; } }

int main(){
FILE *fin; unsigned int crc=0;
if((fin=fopen("text.txt","rb+"))== NULL){
printf("can't open file\n"); }
else{
int i; int l=0;
while((i=bit(fin))!=EOF){
l=crc>>7;
crc=crc<<1;
crc=crc|i;
if(l){
crc=crc^P; }
}
for(int j=0; j<8; j++){
l=crc>>7;
crc=crc<<1;
if(l) crc=crc^P;
}
printf("%X\n",crc);
fclose(fin);
}
getch();
}
Пожалуйста, помогите разобрать этот код, ну то есть - что делает каждая строчка? Из этой программы мне нужно сделать другую - для расчета CRC16, сами понимаете, без понимания этого кода задание не сделать.

Последний раз редактировалось farewe11; 11.06.2010 в 01:02. Причина: более удобочитаемо
farewe11 вне форума Ответить с цитированием
Старый 11.06.2010, 01:31   #2
Vikenty
Заслуженный флудер
Участник клуба
 
Аватар для Vikenty
 
Регистрация: 31.03.2010
Сообщений: 1,473
По умолчанию

Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#define P 0x101 //обозначаем полином-делитель

int number_bit=0;
int byte;

int bit(FILE *fp)
{
if(number_bit==0)
{
if((byte=getc(fp))!= EOF) 
{
 number_bit=1; return(byte>>7);
}
else return EOF; }
else
{
int i=(byte>>(7-number_bit))&1;
number_bit=(number_bit+1)%8; return i; } 
}

int main(){
FILE *fin; //Файловая переменная
unsigned int crc=0; //здесь будет хранится контрольная сумма файла
if((fin=fopen("text.txt","rb+"))== NULL){ //если файл не открылся
printf("can't open file\n"); }
else{
int i; int l=0;
while((i=bit(fin))!=EOF){ //расчитываем
l=crc>>7;
crc=crc<<1;
crc=crc|i;
if(l){
crc=crc^P; }
}
for(int j=0; j<8; j++){
l=crc>>7;
crc=crc<<1;   
if(l) crc=crc^P;
}
printf("%X\n",crc); //вывод контрольной суммы на экран
fclose(fin); //закрытие файла
}
getch();
}
Си билдер плохо знаю потому немогу больше документировать
Vikenty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Си] Работа с файлами. Обработка текстовой инфо. Есть код - но в нём не всё ясно flexin Помощь студентам 0 17.01.2010 18:11
Что происходит во время Win+D? Altera Общие вопросы Delphi 13 15.12.2009 05:16
Как сохранить изображение Image и всё что на нём, в файл? Лукманов Александр Мультимедиа в Delphi 3 24.05.2009 00:16
Что происходит с локальным сервером??? just me PHP 13 14.04.2009 14:01
что то непонятно sergei64_89 Общие вопросы C/C++ 9 25.05.2008 16:58