| eXeL@B —› Программирование —› Вопрос знатокам С++ | 
| Посл.ответ | Сообщение | 
| 
 | 
Создано: 12 марта 2012 00:25 · Поправил: depler  · Личное сообщение · #1 есть функция на С++, начинается так: Code: 
 Задача - переписать на delphi, застопорился на месте unsigned int* ldata = (unsigned int*) data; и соответсвенно заполнении его. Насколько я понимаю С++ ldata - это указатель на массив data, но не пойму тогда, почему к нему обращаются как к обычному массиву, и заполняет он data както странно. Вот например data[16] какому элементу data соответствует? ----- Лень - это подсознательная мудрость ![]()  | 
| 
 | 
Создано: 12 марта 2012 00:43  · Личное сообщение · #2  | 
| 
 | 
Создано: 12 марта 2012 00:44 · Поправил: HandMill  · Личное сообщение · #3 depler пишет: Вот например data[16] какому элементу data соответствует? попытаюсь исправить для начала вопрос: Вот например ldata[16] какому элементу data соответствует? ответ: соответствует 16 * sizeof(int) элементу массива data (умножаем на sizeof(int) ибо приведение типов). При переводе с си на делфи, стоит напомнить что в си нумерация элементов массивов в отличае от делфи начинается с 0. При объявлении массива: char data[1024]; помните что data является указателем на массив. И так будет в любом языке программирования. Выражение (unsigned int*) data; ничто иное как банальное приведение типов. ----- все багрепорты - в личные сообщения ![]()  | 
| 
 | 
Создано: 12 марта 2012 01:02 · Поправил: depler  · Личное сообщение · #4 r_e, HandMill в теории оно конечно так, но вот наваял на делфи: Code: 
 В приниципе должно работать, но delphi заполняет "строго по математике" 64, 68, 72... С++ начинает почему то с 66, затем 70, откуда то 72, и т.д. Выкладываю полный исходник этой штуки. Гляньте, то ли я дурак, то ли лыжи не едут. )) Если можно упростите функцию, чтобы без указателей была. ----- Лень - это подсознательная мудрость ![]()  | 
| 
 | 
Создано: 12 марта 2012 01:09  · Личное сообщение · #5  | 
| 
 | 
Создано: 12 марта 2012 03:12  · Личное сообщение · #6 1) при типе data: array of DWORD; ====> C memcpy(data, input, length); не идентично ====> Delphi for i := 1 to length(password) do data[i-1]:=ord(password[i]); в первом случае (при рассмотрении побайтно 'p', 'a', 's', 's' .... во втором 'p',0,0,0,'a',0,0,0,'s',0,0,0,'s',0,0,0 .... 2) ldata не используется 3) при типе data: array of DWORD; ИМХО вместо data[(i + 16)*sizeof(DWORD)] достаточно data[i+16], как дальше по выражению. ----- 127.0.0.1, sweet 127.0.0.1 ![]()  | 
| 
 | 
Создано: 12 марта 2012 11:06 · Поправил: VodoleY  · Личное сообщение · #7 depler а не рассматривали ли вы библиотечку для делфи dcpcrypt2-laz-2.0.3-2, там много крипто и хешей под делфю портированно, я ей частенько пользуюсь и sha там есть... Code: 
 вот кусок из модуля.. как по мне весьма похоже  
----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....   | Сообщение посчитали полезным: sendersu, DimitarSerg | 
| 
 | 
Создано: 12 марта 2012 16:45  · Личное сообщение · #8 иногда проще выучить с++  
----- Реверсивная инженерия - написание кода идентичного натуральному   | Сообщение посчитали полезным: BoRoV | 
| 
 | 
Создано: 12 марта 2012 17:48  · Личное сообщение · #9  | 
| 
 | 
Создано: 12 марта 2012 18:04  · Личное сообщение · #10  | 
| 
 | 
Создано: 12 марта 2012 18:07  · Личное сообщение · #11  | 
| 
 | 
Создано: 13 марта 2012 02:43  · Личное сообщение · #12 Таки накодил я эту хрень, туды ее в качель )) Если кому интересно: Code: 
 ----- Лень - это подсознательная мудрость   | Сообщение посчитали полезным: Dart Sergius, igorca | 
| 
 | 
Создано: 09 мая 2012 01:16  · Личное сообщение · #13 Вообще то это не С++, а код школьника. Признаки: 1) Судя по коду глобальная область видимости функции - то есть по простому: функционал по каким то причинам вынесен за пределы класса. Скорее всего изначально на этапе проектирования допущена ошибка, либо вообще не проектировали и об UML ничего не знали, сразу код писали. Либо это метод класса и код приведён не полностью. 2) Magic Value разбросаны по коду, как мусор по хате: char data[1024]; memset(data, 0, 1024); for (i = 0; i < 64; i++); ldata[i + 16]; и т.д. Так не пишут. 3) unsigned int* ldata = (unsigned int*) data; Грубая ошибка: Запрещённое приведение в стиле Си, когда должно выполняться приведение в стиле С++, для этого у языка имеются соответствующие операторы. 4) unsigned int a, b, c, d, e, g; Бестолковые имена переменных. ![]()  | 
| 
 | 
Создано: 09 мая 2012 01:26  · Личное сообщение · #14 Мистер мега кодер. Вы дату постов смотрели? Да и решен уже вопрос топика. Первое предупреждение.   | Сообщение посчитали полезным: plutos | 
| eXeL@B —› Программирование —› Вопрос знатокам С++ | 
| Эта тема закрыта. Ответы больше не принимаются. | 








 Для печати