Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Binarni zapis fajla

[es] :: Pascal / Delphi / Kylix :: Binarni zapis fajla

[ Pregleda: 4396 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

GyG@
Srbija

Član broj: 44714
Poruke: 50
*.160.eunet.yu.



Profil

icon Binarni zapis fajla10.04.2008. u 21:36 - pre 195 meseci
Jel moze neko da mi kaze kako da iscitam binarni zapis nekog fajla?
Pozz
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Binarni zapis fajla11.04.2008. u 08:36 - pre 195 meseci
> Jel moze neko da mi kaze kako da iscitam binarni zapis nekog fajla?

Verovatno će ti biti najlakše preko TFileStream. Fajl otvaraš sa TFileStream.Create('Putanja', fmOpenRead or fmShareDenyNone);
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.rs.



Profil

icon Re: Binarni zapis fajla11.04.2008. u 08:51 - pre 195 meseci
Citat:
GyG@: Jel moze neko da mi kaze kako da iscitam binarni zapis nekog fajla?


Ja sam tvoje pitanje shvatio na sasvim drugi način, od onog na koji ga je shvatio Igor. Meni se čini da želiš prikaz fajla kao hex dump, a možda i grešim. Verovatno će neko ovo da protumači na neki treći način.

Zato, budi malo konkretniji.

Šta u stvari hoćeš da uradiš?


viking ®
 
Odgovor na temu

stankons
Stanko Milošev
ise Gmbh, Deutschland
Bonn

Član broj: 99408
Poruke: 231
*.trinet.si.

ICQ: 147767352
Sajt: www.milosev.com


Profil

icon Re: Binarni zapis fajla11.04.2008. u 10:46 - pre 195 meseci
Mozda te zanima nesto kao:

http://kurapaty.blogspot.com/2...-compiled-executable-file.html

ili

http://www.delphi3000.com/articles/article_3284.asp?SK=

Ili te u stvari zanima:

http://vx.netlux.org/delphi/
 
Odgovor na temu

GyG@
Srbija

Član broj: 44714
Poruke: 50
*.89.eunet.yu.



Profil

icon Re: Binarni zapis fajla14.04.2008. u 19:35 - pre 194 meseci
Citat:
savkic: > Jel moze neko da mi kaze kako da iscitam binarni zapis nekog fajla?

Verovatno će ti biti najlakše preko TFileStream. Fajl otvaraš sa TFileStream.Create('Putanja', fmOpenRead or fmShareDenyNone);

Jel moze neki primer?

Znaci treba mi da ucitam fajl,zatim ga preveden u binarni zapis i na kraju ga snimim kao novi fajl...
Pozz
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Binarni zapis fajla15.04.2008. u 00:52 - pre 194 meseci
> Znaci treba mi da ucitam fajl,zatim ga preveden u binarni zapis i na kraju ga snimim kao novi fajl...

Razjasni šta to znači, koji fajl imaš i kako treba da ga konvertuješ.
 
Odgovor na temu

viking13
Aleksandar Milanovic
SBB
Novi Beograd

Član broj: 131741
Poruke: 190
*.sbb.rs.



Profil

icon Re: Binarni zapis fajla15.04.2008. u 08:54 - pre 194 meseci
Citat:
savkic: > Znaci treba mi da ucitam fajl,zatim ga preveden u binarni zapis i na kraju ga snimim kao novi fajl...

Razjasni šta to znači, koji fajl imaš i kako treba da ga konvertuješ.


Ne bi me začudilo da na kraju ispadne da hoće da iskopira fajl.
viking ®
 
Odgovor na temu

GyG@
Srbija

Član broj: 44714
Poruke: 50
*.89.eunet.yu.



Profil

icon Re: Binarni zapis fajla15.04.2008. u 09:38 - pre 194 meseci
Imam fajl(bilo koji:slika,zvuk,app...)i treba da ga zapisem u obliku jedinica i nula...Valjda je dovoljno jasno...
Pozz
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
79.101.179.*

Sajt: www.topcode.rs


+2 Profil

icon Re: Binarni zapis fajla15.04.2008. u 09:48 - pre 194 meseci
Hoces da neki fajl pretvoris u text fajl koji bi imao slova/cifre '0' i '1' na mestu bitova originalnog fajla?
 
Odgovor na temu

GyG@
Srbija

Član broj: 44714
Poruke: 50
*.217.eunet.yu.



Profil

icon Re: Binarni zapis fajla15.04.2008. u 11:27 - pre 194 meseci
Pa moze i tako...
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Binarni zapis fajla15.04.2008. u 12:35 - pre 194 meseci
Konverzija fajla u binarne brojeve:
Code:
function FileToBin(const ASourceFile, ATargetFile : String) : Integer;

  function IntToBin(AValue : LongInt; ADigits : Integer) : String;
  begin
    result := StringOfChar('0', ADigits);
    While AValue > 0 Do
    Begin
      If (AValue and 1) = 1 Then
        result[ADigits] := '1';
      Dec(ADigits);
      AValue := AValue shr 1;
    End;
  end;

type
  TCharArray = Array[0..High(Word) div SizeOf(Char) - 1] of Char;
  PCharArray = ^TCharArray;

const
  maxbufsize = 1024 * 1024 * 16; // 16mb
var
  fhndIn, fhndOut : HFILE;
  ofstr           : TOfStruct;
  buf, binbuf     : PCharArray;
  bread, bwrite   : DWORD;
  C1              : DWORD;
  binstr          : String;
  bufsize         : DWORD;
  filesize        : DWORD;
begin
  fhndIn := OpenFile(PAnsiChar(ASourceFile), ofstr, OF_READ);
  If fhndIn <> HFILE_ERROR Then
  Begin
    fhndOut := CreateFile(PAnsiChar(ATargetFile), GENERIC_READ or GENERIC_WRITE, 0, nil,
                          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    If fhndOut <> INVALID_HANDLE_VALUE Then
    Begin
      filesize := GetFileSize(fhndIn, nil);
      If filesize > maxbufsize Then
        bufsize := maxbufsize
      else
        bufsize := filesize;

      GetMem(buf, bufsize);
      GetMem(binbuf, bufsize * 8);
      repeat
        ReadFile(fhndIn, buf^, bufsize, bread, nil);
        If bread > 0 Then
          For C1 := 0 to bread - 1 Do
          Begin
            binstr := IntToBin(Ord(buf^[C1]), 8);
            Move(binstr[1], binbuf^[C1 * 8], 8);
          End;
        WriteFile(fhndOut, binbuf^, bread * 8, bwrite, nil);
      until bufsize <> bread;
      FreeMem(buf);
      FreeMem(binbuf);
      CloseHandle(fhndOut);
      result := ERROR_SUCCESS;
    End
    else
      result := GetLastError;

    CloseHandle(fhndIn);
  End
  else
    result := GetLastError;
end;


Konverzija fajla koji se sastoji od binarnih brojeva u normalan oblik:
Code:
function BinToFile(const ASourceFile, ATargetFile : String) : Integer;

  function BinToInt(AValue : String) : LongInt;
  var
    C1  : Integer;
    len : Integer;
    cut : Integer;
  begin
    result := 0;

    len := Length(AValue);
    cut := 0;
    For C1 := 1 to Length(AValue) Do
      If AValue[C1] <> '0' Then
      Begin
        cut := C1 - 1;
        Break;
      End;
    If cut > 0 Then
    Begin
      Delete(AValue, 1, cut);
      Dec(len, cut);
    End;

    If AValue <> '' Then
      For C1 := len downto 1 Do
        If AValue[C1] = '1' Then
          result := result + (1 shl (len - C1));
  end;

type
  TCharArray = Array[0..High(Word) div SizeOf(Char) - 1] of Char;
  PCharArray = ^TCharArray;

const
  maxbufsize = 1024 * 1024 * 16; // 16mb
var
  fhndIn, fhndOut : HFILE;
  ofstr           : TOfStruct;
  buf, chrbuf     : PCharArray;
  bread, bwrite   : DWORD;
  bufsize         : DWORD;
  filesize        : DWORD;
  C1              : Integer;
begin
  fhndIn := OpenFile(PAnsiChar(ASourceFile), ofstr, OF_READ);
  If fhndIn <> HFILE_ERROR Then
  Begin
    fhndOut := CreateFile(PAnsiChar(ATargetFile), GENERIC_READ or GENERIC_WRITE, 0, nil,
                          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    If fhndOut <> INVALID_HANDLE_VALUE Then
    Begin
      filesize := GetFileSize(fhndIn, nil);
      If filesize > maxbufsize Then
        bufsize := maxbufsize
      else
        bufsize := filesize;

      GetMem(buf, bufsize);
      GetMem(chrbuf, bufsize div 8);
      repeat
        ReadFile(fhndIn, buf^, bufsize, bread, nil);
        If bread > 0 Then
          For C1 := 0 to (bread div 8) - 1 Do
            chrbuf^[C1] := Chr(BinToInt(Copy(buf^, C1 * 8 + 1, 8)));

        WriteFile(fhndOut, chrbuf^, bread div 8, bwrite, nil);
      until bufsize <> bread;
      FreeMem(buf);
      FreeMem(chrbuf);
      CloseHandle(fhndOut);
      result := ERROR_SUCCESS;
    End
    else
      result := GetLastError;

    CloseHandle(fhndIn);
  End
  else
    result := GetLastError;
end;


Btw, BinToFile() radi mnogo sporo za velike fajlove, recimo za fajl od 175mb mu treba oko 5-10 minuta da ga vrati u normalan oblik.
 
Odgovor na temu

GyG@
Srbija

Član broj: 44714
Poruke: 50
*.88.eunet.yu.



Profil

icon Re: Binarni zapis fajla16.04.2008. u 19:05 - pre 194 meseci
Citat:
reiser: Konverzija fajla u binarne brojeve:
Code:
function FileToBin(const ASourceFile, ATargetFile : String) : Integer;

  function IntToBin(AValue : LongInt; ADigits : Integer) : String;
  begin
    result := StringOfChar('0', ADigits);
    While AValue > 0 Do
    Begin
      If (AValue and 1) = 1 Then
        result[ADigits] := '1';
      Dec(ADigits);
      AValue := AValue shr 1;
    End;
  end;

type
  TCharArray = Array[0..High(Word) div SizeOf(Char) - 1] of Char;
  PCharArray = ^TCharArray;

const
  maxbufsize = 1024 * 1024 * 16; // 16mb
var
  fhndIn, fhndOut : HFILE;
  ofstr           : TOfStruct;
  buf, binbuf     : PCharArray;
  bread, bwrite   : DWORD;
  C1              : DWORD;
  binstr          : String;
  bufsize         : DWORD;
  filesize        : DWORD;
begin
  fhndIn := OpenFile(PAnsiChar(ASourceFile), ofstr, OF_READ);
  If fhndIn <> HFILE_ERROR Then
  Begin
    fhndOut := CreateFile(PAnsiChar(ATargetFile), GENERIC_READ or GENERIC_WRITE, 0, nil,
                          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    If fhndOut <> INVALID_HANDLE_VALUE Then
    Begin
      filesize := GetFileSize(fhndIn, nil);
      If filesize > maxbufsize Then
        bufsize := maxbufsize
      else
        bufsize := filesize;

      GetMem(buf, bufsize);
      GetMem(binbuf, bufsize * 8);
      repeat
        ReadFile(fhndIn, buf^, bufsize, bread, nil);
        If bread > 0 Then
          For C1 := 0 to bread - 1 Do
          Begin
            binstr := IntToBin(Ord(buf^[C1]), 8);
            Move(binstr[1], binbuf^[C1 * 8], 8);
          End;
        WriteFile(fhndOut, binbuf^, bread * 8, bwrite, nil);
      until bufsize <> bread;
      FreeMem(buf);
      FreeMem(binbuf);
      CloseHandle(fhndOut);
      result := ERROR_SUCCESS;
    End
    else
      result := GetLastError;

    CloseHandle(fhndIn);
  End
  else
    result := GetLastError;
end;


Konverzija fajla koji se sastoji od binarnih brojeva u normalan oblik:
Code:
function BinToFile(const ASourceFile, ATargetFile : String) : Integer;

  function BinToInt(AValue : String) : LongInt;
  var
    C1  : Integer;
    len : Integer;
    cut : Integer;
  begin
    result := 0;

    len := Length(AValue);
    cut := 0;
    For C1 := 1 to Length(AValue) Do
      If AValue[C1] <> '0' Then
      Begin
        cut := C1 - 1;
        Break;
      End;
    If cut > 0 Then
    Begin
      Delete(AValue, 1, cut);
      Dec(len, cut);
    End;

    If AValue <> '' Then
      For C1 := len downto 1 Do
        If AValue[C1] = '1' Then
          result := result + (1 shl (len - C1));
  end;

type
  TCharArray = Array[0..High(Word) div SizeOf(Char) - 1] of Char;
  PCharArray = ^TCharArray;

const
  maxbufsize = 1024 * 1024 * 16; // 16mb
var
  fhndIn, fhndOut : HFILE;
  ofstr           : TOfStruct;
  buf, chrbuf     : PCharArray;
  bread, bwrite   : DWORD;
  bufsize         : DWORD;
  filesize        : DWORD;
  C1              : Integer;
begin
  fhndIn := OpenFile(PAnsiChar(ASourceFile), ofstr, OF_READ);
  If fhndIn <> HFILE_ERROR Then
  Begin
    fhndOut := CreateFile(PAnsiChar(ATargetFile), GENERIC_READ or GENERIC_WRITE, 0, nil,
                          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    If fhndOut <> INVALID_HANDLE_VALUE Then
    Begin
      filesize := GetFileSize(fhndIn, nil);
      If filesize > maxbufsize Then
        bufsize := maxbufsize
      else
        bufsize := filesize;

      GetMem(buf, bufsize);
      GetMem(chrbuf, bufsize div 8);
      repeat
        ReadFile(fhndIn, buf^, bufsize, bread, nil);
        If bread > 0 Then
          For C1 := 0 to (bread div 8) - 1 Do
            chrbuf^[C1] := Chr(BinToInt(Copy(buf^, C1 * 8 + 1, 8)));

        WriteFile(fhndOut, chrbuf^, bread div 8, bwrite, nil);
      until bufsize <> bread;
      FreeMem(buf);
      FreeMem(chrbuf);
      CloseHandle(fhndOut);
      result := ERROR_SUCCESS;
    End
    else
      result := GetLastError;

    CloseHandle(fhndIn);
  End
  else
    result := GetLastError;
end;


Btw, BinToFile() radi mnogo sporo za velike fajlove, recimo za fajl od 175mb mu treba oko 5-10 minuta da ga vrati u normalan oblik.


E bas to mi treba!!!Hvala ti!
Samo imam problem kada prebacim recimo neku sliku u binarni zapis,a zatim pokusam da je vratim u prvobitno stanje,iscrta mi samo pola slike...A kad je rec o aplikacijama,onda nece da ih otvori...
Jel zna neko u cemu je problem?
Pozz

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Binarni zapis fajla16.04.2008. u 20:44 - pre 194 meseci
Da li je ovo akademski problem (rešavaš postavljeni zadatak) ili je konkretni (komercijalni) program? Pitam jer ima boljih načina za tekstualnu reprezantaciju fajla poput BASE64/UUENCODE.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Binarni zapis fajla16.04.2008. u 21:33 - pre 194 meseci
@GyG@
Hm, ima neki bug u decode fji.. a nemam mozga da ga nadjem sad... 'Ajde javi da li ti bas treba binarni zapis pa da prepravim tu fju ili ti treba nesto kao sto je savkic predlozio :)
I da, ova decode fja radi uzasno sporo, enkodovanu sliku od 300kb dekoduje ceo minut xD
 
Odgovor na temu

GyG@
Srbija

Član broj: 44714
Poruke: 50
*.153.eunet.yu.



Profil

icon Re: Binarni zapis fajla20.04.2008. u 21:11 - pre 194 meseci
Citat:
savkic: Da li je ovo akademski problem (rešavaš postavljeni zadatak) ili je konkretni (komercijalni) program? Pitam jer ima boljih načina za tekstualnu reprezantaciju fajla poput BASE64/UUENCODE.

Nasao sam neku komponentu koja radi sa BASE64.Zove se SZCodeBaseX.Samo jos da je skontam... :)

Citat:
reiser: @GyG@
Hm, ima neki bug u decode fji.. a nemam mozga da ga nadjem sad... 'Ajde javi da li ti bas treba binarni zapis pa da prepravim tu fju ili ti treba nesto kao sto je savkic predlozio :)
I da, ova decode fja radi uzasno sporo, enkodovanu sliku od 300kb dekoduje ceo minut xD

Da,skontao sam da je spora,tako da cu pokusati sa BASE64....

Hvala puno!
Pozz
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Binarni zapis fajla21.04.2008. u 00:33 - pre 194 meseci
> Nasao sam neku komponentu koja radi sa BASE64.Zove se SZCodeBaseX.Samo jos da je skontam... :)

Skini JCL (www.delphi-jedi.org) i u JclMime.pas ćeš naći encode funkcije. Ako ti je potreban veći izbor enkoding metoda i veći broj opcija onda možeš koristiti Indy, uniti su IdCoder*.

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Binarni zapis fajla

[ Pregleda: 4396 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.