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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 20:38   #1
farewe11
Пользователь
 
Регистрация: 31.05.2010
Сообщений: 15
Вопрос Нужно рассчитать CRC16, на Си. Коды с википедии не подходят.. (

В общем, задача такая: есть у нас файл..
Код:
FILE *in; in = fopen("text.txt","r");
Нужно посчитать CRC16 от него, полином таков: 0x18002
Вот я просто хз!!! Нигде не могу найти то, что работало бы!
Проверка на рабочесть такая:
- вычисляем crc
- дописываем полученное значение в конец файла
- вычисляем crc вновь и получаем 0 (надеюсь, не надо объяснять, почему=))
Вот как раз-таки последнее требование не выполняется. Бьюсь уже вторую неделю, завтра последний день для сдачи этой работы, иначе недопуск и как минимум допса в августе. Помогите, плиз...
farewe11 вне форума Ответить с цитированием
Старый 10.06.2010, 20:41   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почему коды с Вики не подходят?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.06.2010, 20:50   #3
farewe11
Пользователь
 
Регистрация: 31.05.2010
Сообщений: 15
По умолчанию

Почему не походят? Потому что не получается их приспособить.. Я в Си недавно совсем, и вот эти коды со всякими символами >>, <<, ? - для меня практически совсем непонятны..
В вики процедура вычисления Crc16 есть, аргументы у неё - чаровская переменная и какая-то int len, длина чего-то.. в общем, непонятно!
farewe11 вне форума Ответить с цитированием
Старый 10.06.2010, 21:15   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

указатель на буфер где находятся данные которые надо про-CRC16-рить
а второе это размер этого буфера(то есть размер данных)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.06.2010, 21:18   #5
farewe11
Пользователь
 
Регистрация: 31.05.2010
Сообщений: 15
По умолчанию

Цитата:
указатель на буфер где находятся данные которые надо про-CRC16-рить
а второе это размер этого буфера(то есть размер данных)
В моём случае нет же никакого буфера, все данные находятся в файле....

Последний раз редактировалось farewe11; 10.06.2010 в 22:17.
farewe11 вне форума Ответить с цитированием
Старый 10.06.2010, 22:19   #6
farewe11
Пользователь
 
Регистрация: 31.05.2010
Сообщений: 15
По умолчанию

блин. если никто не знает, выложу код crc8, полностью рабочий, помогите хотя бы просто перевести его в crc16:
Код:
#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();
}
farewe11 вне форума Ответить с цитированием
Старый 10.06.2010, 22:25   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
В моём случае нет же никакого буфера, все данные находятся в файле....
а что мешает занести в память?

или переписать тот код на загрузку с файла?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.06.2010, 22:32   #8
farewe11
Пользователь
 
Регистрация: 31.05.2010
Сообщений: 15
По умолчанию

Недостаток опыта мешает. Блин, Вы до сих пор ничего по теме не сказали.. Я за помощью обращаюсь только в крайнем случае, только тогда, когда уже просто в тупике застрял. Так что будьте уверены, что я просто на мели и рассчитываю только на Вас
farewe11 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CRC16 в С# Linore Общие вопросы .NET 13 03.02.2010 20:14
Помогите с РГР на Си(есть коды, нужно подправить) Darh Помощь студентам 1 27.12.2009 21:16
стоит ХР, поэтому функцию БЗ не могу использовать, а нужно рассчитать. что делать, помогите Baxxter Microsoft Office Excel 2 18.04.2009 02:15
А мы в Википедии извесны ;) Stilet Свободное общение 10 04.01.2009 18:04