Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависает программа на for 
:(
    Опции темы
LorDo
Дата 30.6.2013, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.10.2012

Репутация: нет
Всего: нет



При выполнения части моего кода, который находится ниже программа зависает.
В  чем проблема ?

В массиве ArrayList находятся несколько элементов типа
[0] YzVkZDY3Nzg3MjFhYzJiNjI4YzRmYmE3NDExNDAxODE6VmlydHVhbEJveC5leGU6VmlydHVhbEJveA==
[1] NDlhN2IwZDFjM2Q4M2NiMjlmMWRjN2Y0NjZjMTEwZWE6b2xseWRiZy5leGU6b2xseWRiZw==

В расшифрованном виде
[0] c5dd6778721ac2b628c4fba741140181:VirtualBox.exe:VirtualBox
[1] 49a7b0d1c3d83cb29f1dc7f466c110ea:ollydbg.exe:ollydbg

По идее, код расшифровывает каждый элемент из ArrayList из зашифрованного вида base64 и разбивает на массив строку через разделитель :

Код

var
  ArrayList:Array of String;
  ArrayDynamic:Array of String;
  StrngDynamic:String;
  HTML: string;
  i:integer;
begin
 
  {заполнение ArrayList}

  for i := Low(ArrayList) to High(ArrayList) do
   begin
    StrngDynamic:='';
    FillChar(ArrayDynamic, SizeOf(ArrayDynamic), #0);
    
    StrngDynamic:= DecodeBase64(ArrayList[i]);
    ArrayDynamic:= explode(StrngDynamic, ':');
   end;



Вот функции использующиеся в этом кусочке кода
Код

function DecodeBase64(Value: String): String;

  function DecodeChunk(const Chunk: String): String;
  var
    W: LongWord;
    i: Byte;
  begin
    W := 0; Result := '';
    for i := 1 to 4 do
      if Pos(Chunk[i], b64alphabet) <> 0 then
        W := W + Word((Pos(Chunk[i], b64alphabet) - 1)) shl ((4 - i) * 6);
    for i := 1 to 3 do
      Result := Result + Chr(W shr ((3 - i) * 8) and $ff);
  end;

begin
  Result := '';
  if Length(Value) mod 4 <> 0 then Exit;
  while Length(Value) > 0 do
  begin
    Result := Result + DecodeChunk(Copy(Value, 0, 4));
    Delete(Value, 1, 4);
  end;
end;

function Explode(S: String; Delimiter: Char): ReturnArray; overload;
var I, C: Integer; P, P1: PChar;
begin
    SetLength(Result, 0);
    if Length(S) = 0 then Exit;
    P:=PChar(S+Delimiter); C:=0;
    while P^ <> #0 do begin
       P1:=P;
       while (P^ <> Delimiter) do P:=CharNext(P);
       Inc(C);
       while P^ in [#1..' '] do P:=CharNext(P);
       if P^ = Delimiter then begin
          repeat
           P:=CharNext(P);
          until not (P^ in [#1..' ']);
       end;
    end;
    SetLength(Result, C);
    P:=PChar(S+Delimiter); I:=-1;
    while P^ <> #0 do begin
       P1:=P;
       while (P^ <> Delimiter) do P:=CharNext(P);
       Inc(I); SetString(Result[I], P1, P-P1);
       while P^ in [#1..' '] do P:=CharNext(P);

       if P^ = Delimiter then begin
          repeat
           P:=CharNext(P);
          until not (P^ in [#1..' ']);
       end;
    end;
end;


PM MAIL   Вверх
northener
Дата 30.6.2013, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(LorDo @  30.6.2013,  14:14 Найти цитируемый пост)
Copy(Value, 0, 4)

Что это такое?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
LorDo
Дата 30.6.2013, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.10.2012

Репутация: нет
Всего: нет



Цитата(northener @ 30.6.2013,  15:50)
Цитата(LorDo @  30.6.2013,  14:14 Найти цитируемый пост)
Copy(Value, 0, 4)

Что это такое?

Честно говоря, я не сильно вникал в работу фукции DecodeBase64, нашел её на просторах форума, и она отлично работает.
PM MAIL   Вверх
northener
Дата 30.6.2013, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(LorDo @  30.6.2013,  15:53 Найти цитируемый пост)
Честно говоря, я не сильно вникал в работу фукции DecodeBase64

А ты для начала попробуй вникни в параметры функции Copy.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
LorDo
Дата 30.6.2013, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.10.2012

Репутация: нет
Всего: нет



Цитата(northener @ 30.6.2013,  16:07)
Цитата(LorDo @  30.6.2013,  15:53 Найти цитируемый пост)
Честно говоря, я не сильно вникал в работу фукции DecodeBase64

А ты для начала попробуй вникни в параметры функции Copy.

Фишка в том что бог с ней с этой функцией явно не из за неё for залипает, если убрать расшифровку эффект тот же.
PM MAIL   Вверх
northener
Дата 30.6.2013, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(LorDo @  30.6.2013,  16:22 Найти цитируемый пост)
Фишка в том что бог с ней с этой функцией

А какой смысл отлаживать программу плюя на очевидные ошибки?


Цитата(LorDo @  30.6.2013,  16:22 Найти цитируемый пост)
не из за неё for залипает, если убрать расшифровку эффект тот же

Используй отладчик для поиска причины зависания.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
MetalFan
Дата 1.7.2013, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(LorDo @  30.6.2013,  15:53 Найти цитируемый пост)
Честно говоря, я не сильно вникал в работу фукции DecodeBase64, нашел её на просторах форума, и она отлично работает. 

Странно, зачем тащить в свой код непонятно кем написанные функции... если все, что нужно, и так уже есть в "комплекте". Правда в крайних версиях делфи.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0808 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.