Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Алгоритм для CheckSum crc16

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
AndyM
Гость





СообщениеДобавлено: Вт Окт 15 2002 07:09    Заголовок сообщения: Алгоритм для CheckSum crc16 Ответить с цитатой

Привет всем!
Не знает ли кто-нить топик?
Если быть точным, то нужно реализовать аналог фокспрошной функции sys(2007,сExpression)(возвращает контрольную сумму выражения cExpression) на другом языке.
Заранее благодарен!
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Ср Окт 16 2002 05:56    Заголовок сообщения: Вот С-шная процедура, помогите разобраться! Ответить с цитатой

//
// Function: CalcCkSum, private
//
// Synopsis: Calculates the checksum for a general field.
//
// Arguments: [ptr] -- pointer to data to calculate checksum on.
// [cb] -- number of bytes in the buffer.
//
// Modifies: ObjectCheckSum
//
//---------------------------------------------------------- -------------- LOCAL void CalcCkSum(void *ptr, long cb)
{
long cktemp = 0;
long cl = cb >> 2;
long *lp = (long *) ptr;
TEXT *cp;

while(cl--)
cktemp ^= *lp++;
cl = cb & 3; // Any remainder?
cp = (TEXT *)lp;
while(cl--)
cktemp ^= *cp++;

ObjectCheckSum ^= cktemp;
ObjectCheckSum ^= cktemp >> 8;
ObjectCheckSum ^= cktemp >> 16;
ObjectCheckSum ^= cktemp >> 24;
}
//----------------------------------------
Аргументы - указатель на данные и длина буфера.
А дальше что? Ну не знаю я С ! Sad(
Вернуться к началу
AndyC
Гость





СообщениеДобавлено: Ср Окт 16 2002 15:05    Заголовок сообщения: Re: Вот С-шная процедура, помогите разобраться! Ответить с цитатой

long cl = cb >> 2;//количество целых 32-бит слов

while(cl--)
cktemp ^= *lp++;// xor всех 32-бит слов

cl = cb & 3; // остаток 8-бит слов

while(cl--)
cktemp ^= *cp++;//xor всех 8-бит слов

ObjectCheckSum ^= cktemp;//xor байта
ObjectCheckSum ^= cktemp >> 8;//xor 1 байта
ObjectCheckSum ^= cktemp >> 16;//xor 2 байта
ObjectCheckSum ^= cktemp >> 24;//xor 3 байта

Вроде бы такSmile
ObjectCheckSum похоже 8-бит.
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Чт Окт 17 2002 11:34    Заголовок сообщения: Re: Вот С-шная процедура, помогите разобраться! Ответить с цитатой

Спасибо за помощь!
А что такое TEXT *cp ?
И cp = (TEXT *)lp; ??
Кароче, воткнул я эту процедуру в созданный мастером на VC++ 6.0 код.
Создавалась DLL-ка, цель - передача строки и получение контрольной суммы.
При компиляции получаю следующие ошибки(даю по строкам):
//.................
static unsigned char ObjectCheckSum = 0;
int fnChecksum(void *ptr, long cb)
{
long cktemp = 0;
long cl = cb >> 2;
long *lp = (long *) ptr;
TEXT *cp; // 'TEXT' : undeclared identifier
//'cp' : undeclared identifier
//'*' : operator has no effect; expected operator with side-effect

while(cl--)
cktemp ^= *lp++;
cl = cb & 3;
cp = (TEXT *)lp; //syntax error : ')'
while(cl--)
cktemp ^= *cp++; //illegal indirection

ObjectCheckSum ^= cktemp;
ObjectCheckSum ^= cktemp >> 8;
ObjectCheckSum ^= cktemp >> 16;
ObjectCheckSum ^= cktemp >> 24;
}

Я так понял, что дело в различии между С и С++, потому что функция изначально С-шная...
Может, кто поможет ее переделать...
Вернуться к началу
AndyC
Гость





СообщениеДобавлено: Чт Окт 17 2002 16:00    Заголовок сообщения: Re: Вот С-шная процедура, помогите разобраться! Ответить с цитатой

Судя по ObjectCheckSum, функция была встроена в класс и проверяла в текстовом файле (судф по TEXT*).
TEXT можно заменить на unsigned char.
Все остальные ошибки вытекают из-за неопределённости этого типа.
На мой взгляд, static ... Obj.. не реентерабельно особенно для DLL.
И грабли инициализировать перед вызовом и т.д.
Проще возвращать это из функции.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...