Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Perevod dvoichnogo koda iz Memo v fajl


Автор: Neznajka 8.3.2005, 13:58
Uvazhaemie kollegi, ja hotel bi pointeresovat'sja, kak v Deplphi mozno sohranitj dvoichnij kod, kotorij nahoditsa v Memo v fajl. Naprimer v Memo hranitsa dvoichnij kod simvola "p". Ja hochu sohranitj etot kod v txt fajl, chtobi zatem otkritj ego i uvidetj tam etot simvol. Ili v memo dvoichnij kod malenkogo exe fajla. Kak sohranitj ego kak exe, ctobi on funkcioniroval korektno ? Spasibo.

Автор: SoWa 8.3.2005, 19:09
Ну, все не так просто:
Двоичный код надо преобразовывать в байты(1 байт- 8 бит) а затем приписывать эти байты к нужному файлу.
Используй такие вещи:
Код

var f: file of byte;
x: byte
...
assignfile(f, '.../..../..../file.exe');
rewrite(f);
...........
x:=твой байт
write(f,x);
.........
closefile(f);

Автор: Neznajka 8.3.2005, 21:11
Xmm. Nu a esli u menja 900 strok koda ? - eto nemnogo.

Ja tut (na etom forume) nawel obratnoe: perevod iz fajla v dvoizhij kod (v Memo). Mne nuzhno tozhe samoe tolko obratno.

Код

procedure FileToBin(fn:string);
const
m: array[1..8] of byte=(128,64,32,16,8,4,2,1);
var
f: file of byte;
b: byte;
l: string;
i: integer;
begin
Form1.Memo1.Clear;
if not FileExists(fn) then exit;
Assign(f,fn); Reset(f);
while not EOF(f) do begin
  Read(f,b); l:='';
  for i:=1 to 8 do
    if (b or m[i]) = b then l:=l+'1'
    else l:=l+'0';
  Form1.Memo1.Lines.Add(l);
end;
CloseFile(f);
end;

Автор: Skyline 9.3.2005, 15:07
Хммм. Действительно интерестный вопрос. Я бы тоже хотел узнать, как это делается. Программисты ?

Автор: Dr.No_xXx 9.3.2005, 15:16
можно например научить программу обрабатывать и конвертировать символы из 2 в десятичную или в текст и при записи в файл записывать уже букву или число
или я неправильно понял?

Автор: SoWa 9.3.2005, 15:26
Потом, как нибудь, выложу исходник... А может кто и раньше даст

Автор: p0s0l 9.3.2005, 16:09
Что-то типа этого:
Код
var
  txt, s : string;
  f : file of byte;
  i, j : integer;
  b : byte;

begin
  txt := Memo1.Text;
  AssignFile (f, 'C:\dump.bin');
  Rewrite (f);
  s := '';
  for i := 1 to Length(txt) do
  begin
    if (txt[i] = '0') or (txt[i] = '1') then s := s + txt[i]
    else if s <> '' then
    begin
      b := 0;
      for j := 1 to Length(s) do
        if s[j] = '1' then b := b or (1 shl (Length(s)-j));
      Write (f, b);
      s := '';
    end;
  end;
  CloseFile (f);
end;

Автор: Neznajka 10.3.2005, 01:05
O, Spasibo p0s0l ! Was budu probivatj !

Автор: Neznajka 10.3.2005, 01:25
Nde. K sozaleniju nicego ne polucaetsa. Ja sdelal tak - vvel kod simvola "p" (01110000) i exportnul etot kod v txt fajl (ja zaranee znaju format fajla - *.txt). Kogda ja ego otkril, to obnaruzil pustotu ..

Автор: p0s0l 10.3.2005, 09:47
Neznajka, грубый недодум smile
Надо подправить первую строку:
Код
  txt := Memo1.Text + ' ';

Автор: Neznajka 10.3.2005, 11:17
Obaaa. p0s0l ti GENIJ ! Spasibo bolsoe ! Vse prekrasno rabotaet !!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)