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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертирование в двоичный код, символы и цифры 
V
    Опции темы
Ganoci
Дата 8.2.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кратко опишу ситуацию:
Есть текстовый файл из которого мы считываем информацию в переменную buf.
К слову сказать - этот файл - ключ для шифроалгоритма (key.txt)
Но дело в том, что программа распознает только двоичный код (10101...), поэтому приходится в файл записывать в таком виде. Что мне если честно не нравиться.

Собственно вопрос:
Хотелось бы чтобы в файл key.txt м/б бы записывать как цифры (хотябы в 10 системе исчисления) так и буквы (хотябы английский алфавит).
А программа бы конвертировала их в двоичную ситему.

Товарищи программисты подскажите пожалуйста можно ли это реализовать и как?
PM MAIL   Вверх
Ganoci
Дата 8.2.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile 
PM MAIL   Вверх
Qu1nt
Дата 8.2.2008, 18:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну каждый символ переводи в бинарное представление, например, с помощью функции:
Код

function IntToBin(Value, Digits: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to Digits - 1 do
    if Value and (1 shl i) > 0 then
      Result := '1' + Result
    else
      Result := '0' + Result;
end;

Если я правильно понял...

Это сообщение отредактировал(а) Qu1nt - 8.2.2008, 19:57
PM MAIL   Вверх
Ganoci
Дата 8.2.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Qu1nt @ 8.2.2008,  18:37)
Ну каждый символ переводи в бинарное представление, например, с помощью функции:
Код

function IntToBin(Value, Digits: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to Digits - 1 do
  begin
    if Value and (1 shl i) > 0 then
      Result := '1' + Result
    else
      Result := '0' + Result;
end;

Если я правильно понял...

Почему-то  Дельфя не хочет принимать эту функцию. Размещаю её сразу после:
Код

implementation

{$R *.dfm}

function IntToBin(Value, Digits: Integer): string;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to Digits - 1 do
  begin
    if Value and (1 shl i) > 0 then
      Result := '1' + Result
    else
      Result := '0' + Result;
end;


procedure...


Но при компиляции вылетает ошибка:

Цитата

  [Warning] okno.pas(65): For loop control variable must be simple local variable
  [Error] okno.pas(73): Statement expected but 'PROCEDURE' found
  [Fatal Error] ES.dpr(8): Could not compile used unit 'okno.pas'



Это сообщение отредактировал(а) Ganoci - 8.2.2008, 19:28
PM MAIL   Вверх
W4FhLF
Дата 8.2.2008, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



добавь end; ещё один или убери begin после for ... do


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Qu1nt
Дата 8.2.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Извиняюсь, на коленке писал.
PM MAIL   Вверх
Ganoci
Дата 8.2.2008, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

добавь end; ещё один или убери begin после for ... do


Цитата

Извиняюсь, на коленке писал.

Да я сам ступил мог бы и увидеть такую фигню. ))

Только чего-то у меня не получается воспользоваться этой функцией нормально.


Пока не использую основную программу, а создал другую для тестирования:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  res, buf: string;
  i:integer;


implementation

{$R *.dfm}
function IntToBin(Value, Digits: Integer): string;
begin
  Result := '';
  for i := 0 to Digits - 1 do
  begin
    if Value and (1 shl i) > 0 then
      Result := '1' + Result
    else
      Result := '0' + Result;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
buf:=Memo1.Text;
res:= res + IntToBin(strtoint(buf),  8);
Memo1.Text:=res;
end;

end.




Судя по всему она конвертит только числа?
8 я поставил просто так и если использовать число =<255 то тогда нормуль переводит. Если больше то неправильно.
Если же поставить большее значение (1024), то нужны цифры равные, меньшие же просто заполнят Мемо, т.е. будут повторяться пока не будет 1024 бита.

1) Подскажите, пожалуйста, что можно обозначить в качестве конца чтобы любые числа конвертировалась нормально?

2) Возможно ли сделать так чтобы конвертировались еще и символы?

Это сообщение отредактировал(а) Ganoci - 8.2.2008, 23:05
PM MAIL   Вверх
Qu1nt
Дата 9.2.2008, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посимвольно...
Код

procedure TForm1.Button1Click(Sender: TObject);
const
  APP_STR = 'one more time, хе-хе. 250 50';
var
  i: Integer;
  r: string;
begin
  for i := 1 to Length(APP_STR) do
  begin
    r := r + IntToBin(Ord(APP_STR[i]), 8);
  end;
  Memo1.Text := r;
end;

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


Эксперт
***


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

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



Цитата(Ganoci @  8.2.2008,  23:04 Найти цитируемый пост)
Судя по всему она конвертит только числа?

 smile 
Цитата(Ganoci @  8.2.2008,  23:04 Найти цитируемый пост)
8 я поставил просто так и если использовать число =<255 то тогда нормуль переводит.

2 в 8 степени сколькобудет? Правильно будет 256 учитывая что первый 0 то диапазон от 0 до 255 1 байт (11111111 = 255) если поставишь 16 то будет диапазон от 0 до 65535 т.е. 2 байта (0000000011111111 = 255) и.т.д.

PM MAIL ICQ   Вверх
Ganoci
Дата 13.2.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, ребята, за помощь! ))
PM MAIL   Вверх
Qu1nt
Дата 13.2.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всегда пожалуйста) Галочку не забудь..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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