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
| никак. потому что 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); Цитата:
| | |||
3
- 27.06.2017 - 10:02
| в делфи так, кстати, тоже можно. | | |||
4
- 27.06.2017 - 10:09
| Берется первый (не нулевой!) long из массива lr и его адрес передается как адрес массива из байт. Грубо говоря, permut получает байты из которых состоит lr[1] | | |||
5
- 27.06.2017 - 10:11
| то же самое что и table = table + 1; | | |||
6
- 27.06.2017 - 10:22
| Цитата:
Я уже не помню, разве в с можно к указателям прибавлять цифры? В паскале\делфи указатели можно только inc\dec | | |||
7
- 27.06.2017 - 15:15
| целочисленные - можно. Указатель при этом сдвигается на соответствующее количество элементов (не байт). | | |||
8
- 29.06.2017 - 08:32
| можно и так inc(k,2); Цитата:
само по себе преобразование ничего не меняет, но обнаружив нулевой символ, уходит из проц. 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
| Цитата:
Цитата:
T arr[10]; T* p = arr; p = p + 1; // Трактуется как ((BYTE*)p) + sizeof(T) Цитата:
- согласен. | |
| Интернет-форум Краснодарского края и Краснодара |