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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 08:35   #1
Georgios
Пользователь
 
Аватар для Georgios
 
Регистрация: 18.01.2009
Сообщений: 57
Восклицание Непростая CRC16 (нужна помощь)

Возникла проблемка в подсчете CRC. Если кто сможет помогите или посоветуйте что-либо.

Перепробывал чуть ли не все способы, но не выходит.
Итак, полиномное выражение X^16+X^15+X^2+1, начальное значение равно 0.

Есть примеры посылки данных: (строка - CRC)
55 00 01 42 - 87 8F
55 00 02 A2 00 - CC 22
55 00 02 A2 01 - 4C 27

Т.е., вычисляя CRC16 "строки", необходимо получить "CRC"
Если поможет, то есть пример на С++ (я в нем никак )

Заранее спасибо!
Georgios вне форума Ответить с цитированием
Старый 30.07.2009, 09:21   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Давай, конечно, пример, потому что при вычислении нестандартного CRC возможны самые разные тонкости. Лучше сразу посмотреть по примеру, чем подбирать.
Black Fregat вне форума Ответить с цитированием
Старый 30.07.2009, 09:41   #3
Georgios
Пользователь
 
Аватар для Georgios
 
Регистрация: 18.01.2009
Сообщений: 57
По умолчанию

Цитата:
Давай, конечно, пример, потому что при вычислении нестандартного CRC возможны самые разные тонкости. Лучше сразу посмотреть по примеру, чем подбирать.
Вот он, страшный какой...

Код:
unsigned int cal_crc(unsigned cHar *ptr, unsigned char len)
{
	unsigned char i;
	unsigned int crc_value=0;
	while(len--)
	{
		for(i=0x80; i!=0; i>>=1)
		{
			if (crc_value&0x8000)
				crc_value=(crc_value<<1)^0x8005;
			else
				crc_value=crc_value<<1;
			if (*ptr&i)
				crc_value^=0x8005;
		}
		ptr++;
	}
	return(crc_value);
}

Последний раз редактировалось Stilet; 30.07.2009 в 11:28.
Georgios вне форума Ответить с цитированием
Старый 30.07.2009, 11:49   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Пришлось таки повозиться..
CRC у тебя вполне стандартная, вот только считается она без первого байта - 55 чисто маркер, который в подсчете не участвует.

А что тебе от нее теперь нужно?
Black Fregat вне форума Ответить с цитированием
Старый 30.07.2009, 12:00   #5
Georgios
Пользователь
 
Аватар для Georgios
 
Регистрация: 18.01.2009
Сообщений: 57
По умолчанию

Цитата:
Пришлось таки повозиться..
CRC у тебя вполне стандартная, вот только считается она без первого байта - 55 чисто маркер, который в подсчете не участвует.

А что тебе от нее теперь нужно?
Блииин, наверное ты прав, а я даже этому значение не придал. Ведь в примерах все начинается с 55 )))

Мне нужно чтобы получалось то, что в примерах, ну и переделать на Delphi...
Georgios вне форума Ответить с цитированием
Старый 30.07.2009, 15:02   #6
Georgios
Пользователь
 
Аватар для Georgios
 
Регистрация: 18.01.2009
Сообщений: 57
По умолчанию

Black Fregat, спасибо огромное!!!!!
Ты прав: первый байт не нужен.
Все получилось!!!!!!!
Georgios вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Непростая задачка на C++ Poor Student Помощь студентам 1 21.06.2009 23:40
сортровка непростая! rcn БД в Delphi 1 27.01.2009 17:10