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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите перевести с C# на Delphi base256 
:(
    Опции темы
x0x0x0
Дата 12.4.2015, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот есть достаточно простой код, но немогу его перевести :( 

Код

{
    public class Base256 : Base
    {
        public const string DefaultAlphabet = "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁł";
        public const char DefaultSpecial = (char)0;

        public override bool HaveSpecial
        {
            get { return false; }
        }

        public Base256(string alphabet = DefaultAlphabet, char special = DefaultSpecial,
            Encoding textEncoding = null)
            : base(256, alphabet, special, textEncoding)
        {
        }

        public override string Encode(byte[] data)
        {
            StringBuilder result = new StringBuilder(data.Length);

            for (int i = 0; i < data.Length; i++)
                result.Append(Alphabet[data[i]]);

            return result.ToString();
        }

        public override byte[] Decode(string data)
        {
            unchecked
            {
                byte[] result = new byte[data.Length];

                for (int i = 0; i < data.Length; i++)
                    result[i] = (byte)InvAlphabet[data[i]];

                return result;
            }
        }
    }
}

PM MAIL   Вверх
Illusion Dolphin
Дата 12.4.2015, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



А что не получается? 
Код

const
  Alphabet = '!#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}' + '~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁł';

function Encode(Data: TByteArray): string;
var
  I: Integer;
begin
  Result := '';
  for I := 0 to Length(Data) - 1 do
    Result := Result + Alphabet[Data[I]];
end

function Decode(Data: string): TByteArray;
var
  I: Integer;
begin
  SetLength(Result, Length(Data));

  for I := 0 to length - 1 do
     Result[I] = Byte(InvAlphabet[Data[I]]);
end;




--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
x0x0x0
Дата 12.4.2015, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код не рабочий 

Код

function Encode(Data: TBytes): string;
var
  I: Integer;
begin
  Result := '';
  for I := 0 to Length(Data) - 1 do
    Result := Result + Alphabet[Data[I] + 1] ; ----- Разве не нужно +1 ? а какже #0 ?
end;


function Decode(Data: string): TBytes;
var
  I: Integer;
begin
  SetLength(Result, Length(Data));

  for I := 0 to Length(Data) - 1 do
   .........  Result[I] :=   Byte( Alphabet[Data[I]] ); ----------- такая магия в Delphi не работает ;)
end;


Это сообщение отредактировал(а) x0x0x0 - 12.4.2015, 22:59
PM MAIL   Вверх
Illusion Dolphin
Дата 13.4.2015, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Разве не нужно +1 

Да, тут +1 нада

Цитата

Result[I] :=   Byte( Alphabet[Data[I]] ); ----------- такая магия в Delphi не работает ;)

А вы тут зря мой код так меняете, тут надо +1, как уже вы заметили выше, и InvAlphabet который находится в базовом классе Base


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
x0x0x0
Дата 13.4.2015, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Illusion Dolphin
Цитата(Illusion Dolphin @  13.4.2015,  09:39 Найти цитируемый пост)
А вы тут зря мой код так меняете, тут надо +1, как уже вы заметили выше, и InvAlphabet который находится в базовом классе Base 


А это в каком юните ?

PM MAIL   Вверх
Illusion Dolphin
Дата 13.4.2015, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

А это в каком юните ?

base.cs, откуда вы копировали

Это сообщение отредактировал(а) Illusion Dolphin - 13.4.2015, 16:40


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
x0x0x0
Дата 13.4.2015, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Illusion Dolphin, А как для Delphi такое сделать ?
PM MAIL   Вверх
Illusion Dolphin
Дата 14.4.2015, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Посмотрите тут http://cybern.ru/delphi-class-inheritance.html или другие ссылке по теме наследование.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
x0x0x0
Дата 14.4.2015, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Illusion Dolphin, А причем тут наследование, я про InvAlphabet , его как в делфи с C# перевести ? smile 
PM MAIL   Вверх
Illusion Dolphin
Дата 14.4.2015, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

А причем тут наследование

Ну вы точнее спрашивайте, мне лично не понятно что у вас не получается перевести. Покажите наработки что-ли.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
x0x0x0
Дата 14.4.2015, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Illusion Dolphin

только так, но это не работает :(

Код


   function InvAlphabet(S: String): Integer;
   begin
     for Result := 1 to 256 do
     if CompareStr(s, Alphabet[Result]  ) = 0 then  Exit;
     Result := -1;
   end;


function Decode(Data: string): TBytes;
var
  I: Integer;
begin
  SetLength(Result, Length(Data));
  for I := 1 to Length(Data) - 1 do
    Result[I] :=   Byte( InvAlphabet[Data[I]]-1 ); 
end;



PM MAIL   Вверх
Illusion Dolphin
Дата 16.4.2015, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

только так, но это не работает :(

А как оно может работать, если вы функцию InvAlphabet с параметром стринговым пишите с квадратными скобками как массив да и ещё индексируете по целочисленному. А что вы делаете вообще, если не секрет?

Я ещё могу понять вот такое:
Код

   function InvAlphabet(S: Char): Integer;
   begin
     for Result := 1 to 256 do
     if s = Alphabet[Result] then Exit;
     Result := -1;
   end;
function Decode(Data: string): TBytes;
var
  I: Integer;
begin
  SetLength(Result, Length(Data));
  for I := 1 to Length(Data) - 1 do
    Result[I] :=   Byte( InvAlphabet(Data[I])-1 ); 
end;


Но всё равно выглядит это как-то странно

Это сообщение отредактировал(а) Illusion Dolphin - 16.4.2015, 10:55


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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