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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hex...ASCII 
V
    Опции темы
кмс
Дата 31.1.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.
Помогите с кодом.
Нужно загрузить бинарный файл и произвести логическую операцию, например xor $CF с 14 байтами,
и потом результат вывести в виде символов ASCII в edit1.
Делаю так:

Код

.................
e: array[1..14] of byte;
.................

procedure TForm1.Button2Click(Sender: TObject);
var
  dmp3: TFileStream;
begin
  if OpenDialog1.Execute then
  begin
    dmp3 := TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite);
    dmp3.Seek($22, soFromBeginning);
    dmp3.Read(e, sizeof(e));
    e[1] := e[1] xor $CF;
  end;
end;


А вот как вывести в edit1 результат в символах ASCII ни как не пойму.
Спасибо.

Это сообщение отредактировал(а) кмс - 31.1.2011, 11:08
PM MAIL   Вверх
кмс
Дата 31.1.2011, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Разобрался. оказывается все просто smile а я что то в дебри полез.
Код

Edit1.Text:=AnsiChar(e[1]);

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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Всю строку целиком:
Код
  Edit1.Text := PAnsiChar(@e[1]);

PM MAIL   Вверх
кмс
Дата 2.2.2011, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Snowy,  спасибо smile

Работает и так:
Код

Edit1.Text := PAnsiChar(@e[1]);

и так:
Код

Edit1.Text := PAnsiChar(@e);

Как правильней?

Это сообщение отредактировал(а) кмс - 2.2.2011, 00:17
PM MAIL   Вверх
northener
Дата 2.2.2011, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(кмс @  2.2.2011,  00:07 Найти цитируемый пост)
Как правильней?

"Правильнее" вариант с @e[1], потому что будет работать и на статических и на динамических массивах. А второй вариант только на статических.


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


Шустрый
*


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

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



Понятно. Спасибо.
PM MAIL   Вверх
кмс
Дата 2.2.2011, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Еще один вопрос  smile 
Открываю бинарный файл как писал выше, теперь нужно изменить в нем несколько байт.
Так работает:
Код

..................
g: array[1..4] of Byte;
dmp3: TFileStream;
..................

procedure TForm1.Panel3Click(Sender: TObject);
begin

    dmp3.Seek($19, soFromBeginning);
    dmp3.Write(g, sizeof(g));
    MPHexEditor1.LoadFromStream(dmp3);

end;

но изменения записывает сразу в файл а мне нужно что бы например просто загружался в 
MPHexEditor1 и потом если нужно уже сохранить.

PS: Может где есть описание TMPHexEditor для чайников smile или может какой другой подобный компонент с нормальным описанием?


Это сообщение отредактировал(а) кмс - 2.2.2011, 15:06
PM MAIL   Вверх
кмс
Дата 2.2.2011, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пока вышел из положения копированием файлов в каталог с программой и уже с копиями работаю, может потом найду лучший вариант.
А вот на счет описания TMPHexEditor вопрос открыт smile
PM MAIL   Вверх
northener
Дата 3.2.2011, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(кмс @  2.2.2011,  20:32 Найти цитируемый пост)
А вот на счет описания TMPHexEditor вопрос открыт 

А без TMPHexEditor жизни нет и быть не может?


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


Шустрый
*


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

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



Цитата(northener @  3.2.2011,  02:42 Найти цитируемый пост)
А без TMPHexEditor жизни нет и быть не может?

Может, но с ним жить веселей smile
К тому же вопрос изначально стоял так:
Цитата
.....или может какой другой подобный компонент с нормальным описанием?

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


Шустрый
*


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

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



Еще раз здравствуйте smile
Помогите разобраться в коде.
Код

..........................
str: string;
a: array[1..8] of Byte;
b: array[1..256] of Byte = ($00, $01, ...$FF);
......

a[1]:=a[1] xor b[1]; //
str:=ByteToStr(a[1]);//  Нужно организовать это в цикл
a[1]:=a[1] xor b[2];//
str:=ByteToStr(a[1]);//
......
a[1]:=a[1] xor b[256];//
str:=ByteToStr(a[1]);//
..........................

Не могу разобраться как организовать цикл с массивами.
Спасибо.


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


Шустрый
*


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

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



Вообщем разобрался, видать надо просто спросить что бы стимул появился разобраться smile


Код

  if rb4.Checked then
  begin
    for algcount := 0 to High(alg) do
    begin
      mmo1.Lines.Add(str1 + ' not ' + ByteToStr(alg[algcount]) + ' = ');
      for datcount := 0 to strlenght do
      begin
        f[datcount] := dat[datcount] and alg[algcount]; // Здесь выдает ошибку
        mmo1.Text := mmo1.Text + ByteToStr(f[datcount]);
        if (f[datcount] = StrToByte(str3)) and (str3 <> '') then
          mmo2.Lines.Add(str1 + ' not ' + ByteToStr(alg[algcount]) + ' = ' + ByteToStr(f[datcount]));
      end;

    end;
  end;



Это сообщение отредактировал(а) кмс - 7.2.2011, 01:20
PM MAIL   Вверх
northener
Дата 7.2.2011, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(кмс @  7.2.2011,  01:15 Найти цитируемый пост)
Вообщем разобрался, видать надо просто спросить что бы

Давно известная истина. Если смог сформулировать вопрос "по существу", сможешь сам найти ответ! Достаточно только ещё немного подумать.


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


Шустрый
*


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

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



Снова возвращаюсь к теме, только теперь надо наоборот, Ansi символы перевести в байты.
То есть, например в Edit1 - 123AH567, надо каждый символ перевести в его HEX представление, что бы получилось так - 3132334148353637
Подскажите плз, а то уже замучился smile
PM MAIL   Вверх
CODeRUS
Дата 1.3.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

var
ch: char;
str, hexstr: string;
...

str:= Edit1.Text;
for ch in str do
    hexstr := hexstr + inttohex(ord(ch), 2);


как-то так

Это сообщение отредактировал(а) CODeRUS - 1.3.2011, 19:20
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.0900 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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