К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Перевод СИ-текста под DELPHI

0 - 25.06.2017 - 13:16
Господа программисты, помогите перевести текст, написанный на СИ, под Delphi (кусок модуля и функцию "permut")

Как корректно перевести:
...
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 ???



1 - 26.06.2017 - 06:50
Цитата:
Сообщение от Александр COM Посмотреть сообщение
КАК это всё написать (перевести) на DELPHI ???
никак. потому что permut = permutation = перестановки. на просторах инета их много, остаётся только взять поудобнее. пока их две. вот сейчас засну, проснусь и сделаю. несчастный ты человек. делаешь неизвестно что.
2 - 27.06.2017 - 01:46
Как корректно перевести:
...
unsigned long lr[3];
signed long i;
lr[1]=0;
lr[2]=0;
permut(((unsigned char*)(&(lr[1]))),input,ip);
Цитата:
Сообщение от Александр COM Посмотреть сообщение
1. Больше всего интересует преобразование (((unsigned char*)(&(lr[1]))).
насколько я понял, просто позволяет обращаться с массивом lr как со строкой
Цитата:
Сообщение от Александр COM Посмотреть сообщение
И непонятна конструкция table++
переход к следующему символу.
3 - 27.06.2017 - 10:02
Цитата:
Сообщение от x0577216 Посмотреть сообщение
переход к следующему символу.
в делфи так, кстати, тоже можно.
4 - 27.06.2017 - 10:09
Цитата:
Сообщение от Александр COM Посмотреть сообщение
1. Больше всего интересует преобразование (((unsigned char*)(&(lr[1]))).
Берется первый (не нулевой!) long из массива lr и его адрес передается как адрес массива из байт. Грубо говоря, permut получает байты из которых состоит lr[1]
5 - 27.06.2017 - 10:11
Цитата:
Сообщение от Александр COM Посмотреть сообщение
И непонятна конструкция table++
то же самое что и
table = table + 1;
6 - 27.06.2017 - 10:22
Цитата:
Сообщение от IvUs Посмотреть сообщение
Цитата: Сообщение от Александр COM Посмотреть сообщение И непонятна конструкция table++ то же самое что и table = table + 1;
Там же звездочка впереди?
Я уже не помню, разве в с можно к указателям прибавлять цифры?
В паскале\делфи указатели можно только inc\dec
7 - 27.06.2017 - 15:15
Цитата:
Сообщение от Добрых дел мастер Посмотреть сообщение
Я уже не помню, разве в с можно к указателям прибавлять цифры?
целочисленные - можно. Указатель при этом сдвигается на соответствующее количество элементов (не байт).
8 - 29.06.2017 - 08:32
Цитата:
Сообщение от Добрых дел мастер Посмотреть сообщение
в делфи так, кстати, тоже можно.
можно и так inc(k,2);
Цитата:
Сообщение от IvUs Посмотреть сообщение
Указатель при этом сдвигается на соответствующее количество элементов (не байт).
Очень сомневаюсь.
само по себе преобразование ничего не меняет, но обнаружив нулевой символ, уходит из проц.

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; строка по стандарту С заканчивается нулем.
--
тщательное изучение обнаружило, что в(lr[1]) сидит единица! Хоть квантуй, хоть не ... всё равно полуишь ..
Надо докопаться до исходной постановки, потому что здесь много чего неправильно.
9 - 04.07.2017 - 07:55
Цитата:
Сообщение от IvUs Посмотреть сообщение
Берется первый (не нулевой!) long из массива lr и его адрес передается как адрес массива из байт
- не первый, а второй (индексация в "С" с 0), а так все правильно.
Цитата:
Сообщение от IvUs Посмотреть сообщение
целочисленные - можно. Указатель при этом сдвигается на соответствующее количество элементов (не байт).
- все верно, арифметика указателей:
T arr[10];
T* p = arr;
p = p + 1; // Трактуется как ((BYTE*)p) + sizeof(T)

Цитата:
Сообщение от x0577216 Посмотреть сообщение
тщательное изучение обнаружило, что в(lr[1]) сидит единица! Хоть квантуй, хоть не ... всё равно полуишь ..
- не должно там быть 1, там 0. :)
Цитата:
Сообщение от x0577216 Посмотреть сообщение
Надо докопаться до исходной постановки, потому что здесь много чего неправильно.
- согласен.


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

Расширенный поиск




Copyright ©, Все права защищены