delphi помогите понять что написано

Тема в разделе "Другие языки", создана пользователем nulledddor, 7 окт 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. nulledddor

    nulledddor Создатель

    Регистр.:
    10 янв 2007
    Сообщения:
    16
    Симпатии:
    0
    привет
    пишу немного на VB NET
    надо перетащить кусок кода с дельфи на VB NET
    никак не вкурю что там написано

    for i:=1 to urllen
    do
    begin
    key:= key xor (Ord(seed[i mod seedlen]) xor Ord(url));
    key:= key shr 23 or key shl 9;
    end;
    помогите партировать код на VB NET или C#
     
  2. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    Исходные данные здесь следующие:

    url - строка, содержит url посещаемого сайта

    seed - строка, которая содержит произвольную фразу, которая будет использоваться для наложения на url.

    key - 4-байтовое целое число. Оно имеет некоторое начальное значение. По мере прохождения по символам url и наложения символов seed значение переменной key меняется. Конечное значение key нас как раз и интересует. Если превратить это число в 16-ричную форму длиной 8 символов, то его можно использовать в качестве параметра ch (контрольная сумма url:(

    Код:
    http://www.google.com/search?client=navclient-auto&ch=0123456789&features=Rank&q=info:http://www.domain.com/
    Код:
    key:= key xor (Ord(seed[i mod seedlen]) xor Ord(url[i]));
    Здесь берем код символа из url, берем код символа из seed, выполняем операцию исключающего или (xor) над key и этими двумя кодами. Получилось новое значение key.

    Код:
    key:= key shr 23 or key shl 9;
    Здесь переставляем местами младшие 23 бита и старшие 9 бит в key.
    Опять получили новое значение key. Повторяем цикл, пока не закончится url.

    seed может оказаться короче чем url, поэтому индекс берем по модулю seedlen:

    Код:
    seed[i mod seedlen]
    где seedlen = length(seed)+1;

    Напишите теперь это на vb и выложите здесь. Тогда будет понятно, что вам непонятно.
     
    nulledddor нравится это.
  3. nulledddor

    nulledddor Создатель

    Регистр.:
    10 янв 2007
    Сообщения:
    16
    Симпатии:
    0
    каков порядок выполнения вот этой операции
    key:= key shr 23 or key shl 9;
    как ее разить на элементарные функции построчно
    просто не знаю какой приоритет у этих операций
     
  4. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    приоритет такой:

    Код:
    key:= (key shr 23) or (key shl 9);
    на C это выглядит так:

     
  5. ArtemRu

    ArtemRu Писатель

    Регистр.:
    30 янв 2009
    Сообщения:
    6
    Симпатии:
    0
    а зачем так много лишних переменных? а не проще сразу записать:

    key=(key>>23)|(key<<9);

    все известные мне компиляторы, пустые разряды заполняют 0.
     
Статус темы:
Закрыта.