Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > C/C++ > C/C++
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.06.2017, 19:18
ComAlex ComAlex вне форума
Прохожий
 
Регистрация: 18.06.2017
Сообщения: 22
Версия Delphi: Delphi XE, C++
Репутация: 10
По умолчанию Как перевести в Delphi код C

Господа ,помогите перевести следущее, написанное на C

Код:
i=data[0];
		i=(i<<8)+data[1];
		i=(i<<8)+data[2];
		i=(i<<8)+data[3];
		if(i==0)return;
		if(dsize<(i+4))return;
		i=decrypt_with_vector(ethkey,ethvector,(LPBYTE)data+4,(LPBYTE)datai,i,0);

Последний раз редактировалось lmikle, 21.06.2017 в 22:58.
Ответить с цитированием
  #2  
Старый 21.06.2017, 23:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ну, i << 8 это i shl 8
При этом i видимо типа long (Integer) - 4 байта.
data - что-то типа array of byte
Не знаю, что такое decrypt_with_vector - с этим сам разбирайся, а остальное выглядит как-то так:
Код:
var
  I : Integer;
begin
  I := data[0];
  I := (I shl 8) + data[1];
  I := (I shl 8) + data[2];
  I := (I shl 8) + data[3];
  If (I = 0) Or (I+4 < dsize) then exit;

  // что такое decrypt_with_vector???
  I := decrypt_with_vector(...);
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
ComAlex (22.06.2017)
  #3  
Старый 25.06.2017, 10:02
ComAlex ComAlex вне форума
Прохожий
 
Регистрация: 18.06.2017
Сообщения: 22
Версия Delphi: Delphi XE, C++
Репутация: 10
По умолчанию

Подскажите еще:

Как корректно перевести:
...
unsigned long lr[3];
signed long i;
lr[1]=0;
lr[2]=0;
permut(((unsigned char*)(&(lr[1]))),input,ip);
...
где
void permut(unsigned char * out,const unsigned char * in, const unsigned char * table)
{
unsigned long i;
for(i=1;*table;i++)
{
// if(bittest(in,*table)) // На это можно не смотреть
// bitset(out,i); // На это можно не смотреть
table++;
}
}

1. Больше всего интересует преобразование (((unsigned char*)(&(lr[1]))).
Как первый параметр функции permut так превратился ....
2. И непонятно table++

КАК это всё написать (перевести) на DELPHI ???
Ответить с цитированием
  #4  
Старый 25.06.2017, 12:46
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
unsigned char*)(&(lr[1])))
Подмассив массива lr, начиная с 1 элемента (сами массивы начинаются с нулевого), приведенный к unsigned char*. Поскольку сам lr - массив long, то это будут просто байты 1 и 2 элементов, записанные как один массив. Long - 4 байта, значит это будет просто массив из 8 байт.

table++ - переход к следующему элементу массива table.

З.Ы. Совершенно непонятно, зачем делать массив lr из 3 элементов и потом игнорировать один из них (нулевой).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter