powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Помогите странслировать с Pascal'я
7 сообщений из 7, страница 1 из 1
Помогите странслировать с Pascal'я
    #36095570
ShadeSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 function StrToIntDef(const S: string; Default: Integer): Integer; var
   E: Integer;
 begin
   Val(S, Result, E);
   if E <>  0  then Result := Default;
 end;

 function ANSIXorDecode(const Key, Source: ANSIString): ANSIString; var
   I: Integer;
   C: Char;
 begin
   Result := '';
   for I :=  0  to Length(Source) div  2  -  1  do begin
     C := Chr(StrToIntDef('$' + Copy(Source, (I *  2 ) +  1 ,  2 ), Ord(' ')));
     if Length(Key) >  0  then
       C := Chr(Byte(Key[ 1  + (I mod Length(Key))]) xor Byte(C));
     Result := Result + C;
   end;
 end;

Buffer := ANSIXorDecode( RootItemName, Buffer ); 
Где RootItemName = 'Spec_Dep_EDODocument'


Есть этот код, написан на Паскале. Переменная Source на самом деле blob, заполнена примерно следующим образом: 033b66674b446570... Это должно быть началом ZIP архива, тоесть раскодироваться в PK...

Вот то что получилось. Не работает, не пойму почему.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
long i, j, ll_code, ll_len
string ls_key, ls_hex
char c
n_bitwise ln_bit

ls_key = 'Spec_Dep_EDODocument'
ll_len = len(lblob_file)

for i= 0  to ll_len/ 4 
   ls_hex = reverse(upper(string(blobmid(lblob_file, (i* 4 ) +  1 ,  4 ))))

   ll_code =  0 
   for j =  1  to len(ls_hex)
      if asc(mid(ls_hex, j,  1 ))>=asc('0') and asc(mid(ls_hex, j,  1 ))<=asc('9') then
        ll_code += (asc(mid(ls_hex, j,  1 )) - asc('0')) * ( 2  ^ ((j -  1 )* 4 ))
      else
        ll_code += (asc(mid(ls_hex, j,  1 )) - asc('A') +  10 ) * ( 2  ^ ((j -  1 )* 4 ))
      end if
    next

   c = char(ln_bit.of_bitwisexor(asc(mid(ls_key,  1  + mod(i, len(ls_key)),  1 )), ll_code))
next

...
Рейтинг: 0 / 0
Помогите странслировать с Pascal'я
    #36095793
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadeSer
Есть этот код, написан на Паскале. Переменная Source на самом деле blob, заполнена примерно следующим образом: 033b66674b446570... Это должно быть началом ZIP архива, тоесть раскодироваться в PK...

Вот то что получилось. Не работает, не пойму почему.

1) Напишите версию PB. От этого зависит преобразование string(blob).
2) Там где вы взяли n_bitwise гдето рядом есть класс для Hex преобразования. Используйте его и не придумывайте заново велосипеды с квадратными колесами.
3) Зачем записывать бинарные данные в строку? Это работает до первого 0. Записывайте в blob.
...
Рейтинг: 0 / 0
Помогите странслировать с Pascal'я
    #36096417
cez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cez
Гость
Anatoly Moskovsky
1) Напишите версию PB. От этого зависит преобразование string(blob).
2) Там где вы взяли n_bitwise гдето рядом есть класс для Hex преобразования. Используйте его и не придумывайте заново велосипеды с квадратными колесами.
3) Зачем записывать бинарные данные в строку? Это работает до первого 0. Записывайте в blob.


Версия 6.5
Проблема в том, что я идиот!!!, посчитал что там юникод, а там все нормально.
Побайтно все заработало.
Правда 2МБ=5часов
Сейчас думаем срочно одеваться на десятку, чтоб с юникодом не трахаться, но чтоб bitwise было штатно.
...
Рейтинг: 0 / 0
Помогите странслировать с Pascal'я
    #36096434
cez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cez
Гость
Anatoly Moskovsky
1) Напишите версию PB. От этого зависит преобразование string(blob).
2) Там где вы взяли n_bitwise гдето рядом есть класс для Hex преобразования. Используйте его и не придумывайте заново велосипеды с квадратными колесами.
3) Зачем записывать бинарные данные в строку? Это работает до первого 0. Записывайте в blob.

И еще!
2)
Конкретно где взять hex.
bitwise я взял лет пять назад с pbdr.com
3)
никто и не записывает, это тестовый пример
...
Рейтинг: 0 / 0
Помогите странслировать с Pascal'я
    #36096457
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cez[quot Anatoly Moskovsky]
Правда 2МБ=5часов

1. Присвойте строку массиву char, и работайте с ним, а не дергайте mid для выкусывания символов.
2. Реализуйте свою функцию в виде получения значения из таблички - для char всего возможно 256 вариантов, соответственно объявляете массив на 256 символов, и по каждому индексу храните в качестве значения массива результат применения к этому индексу операции xor.
Скорость возрастет раз так в 10-100.
...
Рейтинг: 0 / 0
Помогите странслировать с Pascal'я
    #36096558
Anatoly Moskovsky _
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще лучше возьмите эту библиотеку для работы с ZIP. Я так понимаю вам именно это надо, а не только заголовок прочитать.
Это DLL и обертка на PB. Бесплатное.
...
Рейтинг: 0 / 0
Помогите странслировать с Pascal'я
    #36109098
cez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cez
Гость
Anatoly Moskovsky _А еще лучше возьмите эту библиотеку для работы с ZIP. Я так понимаю вам именно это надо, а не только заголовок прочитать.
Это DLL и обертка на PB. Бесплатное.

Спасибо за сайт, там еще много вкусного.

А в общем лишний раз убедился. Математически билдер - говно.
Сделал обвязку в виде DLL на дельфи - 1Мб=10с.
Очень интересно было вспоминать паскаль спустя 20 лет :-)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Помогите странслировать с Pascal'я
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]