Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите перегнать из паскаля в C  (Прочитано 4681 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« : 18-04-2013 08:31 » 

Народ очень нужно перегнать код на паскале в с,в паскале я не в зуб ногой.
procedure AddByteToCRS(const B:byte;var Rg32:cardinal);
const
 Polynom=$F5000000;
var
 J,Rg8:byte;
 F,F1:boolean;
begin
 Rg8:=B;
 for J:=1 to 8 do
  begin
   F:=(Rg8 and 1)<>0;
   F1:=(Rg32 and 1)<>0;
   Rg8:=Rg8 shr 1;
   Rg32:=Rg32 shr 1;
   if F then
    Rg32:=Rg32 or $80000000;
   if F1 then
    Rg32:=Rg32 xor Polynom;
  end;
end;

Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #1 : 18-04-2013 09:05 » 

Если посчитать cardinal за unsigned long, и переводить дословно, то будет нечто подобное:
Код:
#define Polynom 0xF5000000

void AddByteToCRS(unsigned char B, unsigned long* Rg32)
{ unsigned char J,Rg8;
  int F,F1;

  Rg8 = B;
  for (J = 1; J <= 8; J++)
  { F = ((Rg8 & 1) != 0) ? 1 : 0;
    F1 = (((*Rg32) & 1) != 0) ? 1 : 0;
    Rg8 >>= 1;
    (*Rg32) >>= 1;
    if (F)
      (*Rg32) |= 0x80000000;
    if (F1)
      (*Rg32) ^= Polynom;
  }
  return ;
}
Дальше можно смотреть и переводить на более человеческий манер.
« Последнее редактирование: 18-04-2013 09:06 от darkelf » Записан
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #2 : 18-04-2013 10:03 » 

Если посчитать cardinal за unsigned long, и переводить дословно, то будет нечто подобное:
Код:
#define Polynom 0xF5000000

void AddByteToCRS(unsigned char B, unsigned long* Rg32)
{ unsigned char J,Rg8;
  int F,F1;

  Rg8 = B;
  for (J = 1; J <= 8; J++)
  { F = ((Rg8 & 1) != 0) ? 1 : 0;
    F1 = (((*Rg32) & 1) != 0) ? 1 : 0;
    Rg8 >>= 1;
    (*Rg32) >>= 1;
    if (F)
      (*Rg32) |= 0x80000000;
    if (F1)
      (*Rg32) ^= Polynom;
  }
  return ;
}
Дальше можно смотреть и переводить на более человеческий манер.
ОГРОМНОЕ СПАСИБО!!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines