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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать файл имея двоичный текст, Хочу понять Можно ли создать файл 
:(
    Опции темы
naz191
Дата 26.11.2010, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть у меня содержание одной картинки в виде hex (ну и bin - перевел). Содержание вытащил из картинки и перевел в текст в виде hex
Пробую "собрать" файл...
только вот создает файл текстовой - т.е. Я ввожу в мемо код (hex, bin). По идее прога должна конвертировать его в Нормальный рабочий *.png. 
В место этого получаю тот же текст только в *.png и в результате *.png не читабелен (((
Код

var
  f: TMemoryStream;
  S: AnsiString;
begin
  f := TMemoryStream.Create;
  s:= memo1.Text;
  try
    f.Write(S[1], Length(S));
    f.SaveToFile('filename.png');
  finally
    f.Free;
  end;

 В чем моя ошибка? Ну или подсказку?
PM MAIL   Вверх
Snowy
Дата 26.11.2010, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Не понятно.
Покажи кусок текста.
PM MAIL   Вверх
imageman
Дата 29.11.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



подозреваю, что memo1.Text не может содержать все 256 символов (с кодами от 0 до 255).

Если в memo1 строка типа '012abc', то её ещё нужно сконвертировать.

А вообще, действительно, нужно посмотреть пример строки 
PM MAIL   Вверх
naz191
Дата 30.11.2010, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(imageman @ 29.11.2010,  10:34)
пример строки

Вот кусочки... первый в Hex
Код

89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
00 00 02 5d 00 00 01 ae 08 02 00 00 01 52 09 14
c0 00 00 00 06 62 4b 47 44 00 ff 00 ff 00 ff a0
bd a7 93 00 00 00 09 70 48 59 73 00 00 0e c4 00
00 0e c4 01 95 2b 0e 1b 00 00 20 00 49 44 41 54
78 da ec 5d 7f 74 54 55 7e 7f c0 41 70 f7 8f da
b3 3d 7b 50 cf 69 e5 74 e9 56 ed 7a 0a ba db 45
1a ec 5a 4f f1 08 6c 0b 42 65 11 d9 60 d6 88

Второй двоичный
Код

10001001 01010000 01001110 01000111 00001101 00001010 00011010 00001010 00000000 00000000 00000000 00001101 01001001 01001000 01000100 01010010
00000000 00000000 00000010 01011101 00000000 00000000 00000001 10101110 00001000 00000010 00000000 00000000 00000001 01010010 00001001 00010100
11000000 00000000 00000000 00000000 00000110 01100010 01001011 01000111 01000100 00000000 11111111 00000000 11111111 00000000 11111111 10100000
10111101 10100111 10010011 00000000 00000000 00000000 00001001 01110000 01001000 01011001 01110011 00000000 00000000 00001110 11000100 00000000
00000000 00001110 11000100 00000001 10010101 00101011 00001110 00011011 00000000 00000000 00100000 00000000 01001001 01000100 01000001 01010100
01111000 11011010 11101100 01011101 01111111 01110100 01010100 01010101 01111110 01111111 11000000 01000001 01110000 11110111 10001111 11011010
10110011 00111101 01111011 01010000 11001111 01101001 11100101 01110100 11101001 01010110 11101101 01111010 00001010 10111010 11011011 01000101
00011010 11101100 01011010 01001111 11110001 00001000 01101100 00001011 01000010 01100101 00010001 11011001 01100000 11010110 10001000




Это сообщение отредактировал(а) naz191 - 30.11.2010, 09:01
PM MAIL   Вверх
imageman
Дата 30.11.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 отсюда исходник hextoint взять преобразователь 16в10 систему счисления

пары цифр (0d) прогонять через нее и прибавлять к строке. т.е. что-то вроде

var s:AnsiString;

s:=s+chr( HexToInt('0d') );

а потом строку s писать в файл как ты хотел

(надеюсь не попутал ничего)
PM MAIL   Вверх
RinOSpro
Дата 2.12.2010, 15:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Для Hex:

Код

function HexToString(AHexStr: String): String;
var
  i: Integer;
begin
  AHexStr := StringReplace(AHexStr, ' ', '', [rfReplaceAll]);
  SetString(Result, Nil, Length(AHexStr) div 2);
  for i := 1 to Length(AHexStr) div 2 do
    Result[i] := Char(StrToInt('$' + AHexStr[2 * i - 1]+AHexStr[2 * i]));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  LHexStr: string;
  LStr: string;
  LMs: TMemoryStream;
begin
  LHexStr := '89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52' +
    '00 00 02 5d 00 00 01 ae 08 02 00 00 01 52 09 14' +
    'c0 00 00 00 06 62 4b 47 44 00 ff 00 ff 00 ff a0' +
    'bd a7 93 00 00 00 09 70 48 59 73 00 00 0e c4 00' +
    '00 0e c4 01 95 2b 0e 1b 00 00 20 00 49 44 41 54' +
    '78 da ec 5d 7f 74 54 55 7e 7f c0 41 70 f7 8f da' +
    'b3 3d 7b 50 cf 69 e5 74 e9 56 ed 7a 0a ba db 45' +
    '1a ec 5a 4f f1 08 6c 0b 42 65 11 d9 60 d6 88';

  LStr := HexToString(LHexStr);

  LMs := TMemoryStream.Create;
  try
    LMs.Write(LStr[1], Length(LStr));
    LMs.SaveToFile('c:\123.png');
  finally
    LMs.Free;
  end;
end;


Это сообщение отредактировал(а) RinOSpro - 2.12.2010, 15:25
  Вверх
remax
Дата 3.12.2010, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



В принципе, в Delphi уже есть готовая функция HexToBin.
function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer 

и обратная ей процедура BinToHex 
procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);


и живут они в Classes   smile 


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
Snowy
Дата 3.12.2010, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(remax @  3.12.2010,  02:47 Найти цитируемый пост)
В принципе, в Delphi уже есть готовая функция HexToBin.function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer и обратная ей процедура BinToHex procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);и живут они в Classes    
И какое отношение они имеют к данной задаче?
Они умеют пилить шестнадцатиричный текст по пробелам и переводить его в стрим?
Вряд ли...  smile 
PM MAIL   Вверх
remax
Дата 3.12.2010, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Цитата(Snowy @ 3.12.2010,  14:42)
Цитата(remax @  3.12.2010,  02:47 Найти цитируемый пост)
В принципе, в Delphi уже есть готовая функция HexToBin.function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer и обратная ей процедура BinToHex procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);и живут они в Classes    
И какое отношение они имеют к данной задаче?
Они умеют пилить шестнадцатиричный текст по пробелам и переводить его в стрим?
Вряд ли...  smile

такое же самое отношение, что и HexToInt, на который ссылается imageman. Только это стандартная функция и немного более функциональная....

 Да, для того чтобы использовать надо сперва пробелы убрать, например так: 
HexStr := StringReplace(HexStr, ' ', '', [rfReplaceAll]);
Ну, а дальше уже дело техники...
 



--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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