Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод функции с Си на Дельфи 
:(
    Опции темы
Brausman
Дата 3.10.2011, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 1.4.2009

Репутация: -1
Всего: 1



Давно не программировал на Си, по этому просьба, если кто может из данной функции(вычисление контрольной суммы) :
Код

unsigned Hash(char Byte, char nbit, unsigned CRC)
{
    for (int i = 0; i < nbit; i++, Byte <<= 1)
    {
        if (  ( Byte ^ (CRC>>8) ) & 0x80  )
        {
            CRC <<= 1;  CRC ^= 0x8F57;
        }
        else  CRC <<= 1;
    }
    return CRC;
}
 

Объяснить прошу данную строку :
Код

( Byte ^ (CRC>>8) )


Та как сам переводя в Дельфи , для примера с формирующейся последовательностью байтов - 0x04 0x10 0xC1 0x73, получается 0xBD 0xEA, вместо 0x79 0x1E  smile :
Код

function oHASH(m: array of byte): word;
// функция расчета HASH-свертки по ОВЕНу
type Tword_s = record
case boolean of
True: (bw: word);
False: (bb: array [0..1] of byte);
end;

var i,j: integer; // cycle
tmp1, tmp2: byte;
tmp3: Tword_s;
begin
Result:=0;
for i:=0 to High(m) do
begin
tmp1:=m[i];
for j:=0 to 6 do
begin
tmp1:= tmp1 shl 1;
tmp3.bw:=Result;
tmp2:=tmp3.bb[1] xor tmp1;
if (tmp2 and $80)>0 then
  Result:=(Result shl 1) xor $8F57
else
  Result:=Result shl 1;
end;
end;
end;
 

Если кто знает в чем ошибся прошу помочь smile 
PM MAIL   Вверх
bsa
Дата 3.10.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Brausman, это выражение означает ксорку Byte и старшего байта CRC.

Вообще-то, у тебя на си один цикл, а на паскале 2. Может в этом ошибка?
Рекомендую взять готовый код с википедии.
PM   Вверх
Brausman
Дата 3.10.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 1.4.2009

Репутация: -1
Всего: 1



Цитата(bsa @ 3.10.2011,  14:27)
Brausman, это выражение означает ксорку Byte и старшего байта CRC.

Вообще-то, у тебя на си один цикл, а на паскале 2. Может в этом ошибка?
Рекомендую взять готовый код с википедии.

Уже видел, надо бы пример на Дельфи + там протокол свой для рассчета контрольной суммы 
PM MAIL   Вверх
AndreyIQ
Дата 3.10.2011, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 5.2.2007

Репутация: нет
Всего: 8



Может так:
Код

function Hash(Byte: Byte; nbit: Byte; var CRC: dWord):dWord;
var
  i: integer;
begin
  i:=0;
  while i< nbit do
  begin
    if ((Byte xor (CRC shr 8)) and $80) <> 0 then
    begin
      CRC:= CRC shl 1;
      CRC:= CRC xor $8F57;
    end
    else  CRC:= CRC shl 1;
    inc(i);
    Byte:= Byte shl 1;
  end;
  Result:= CRC;
end;


Это сообщение отредактировал(а) AndreyIQ - 3.10.2011, 15:30
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0940 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.