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

Binarni zapis fajla

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

[ Pregleda: 808 | Odgovora: 15 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

GyG@
Srbija

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



Profil

icon Binarni zapis fajla10.04.2008. u 21:36

Jel moze neko da mi kaze kako da iscitam binarni zapis nekog fajla?
Pozz
10.04.2008. u 21:36 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1101
*.adsl-1.sezampro.yu.



Profil

icon Re: Binarni zapis fajla11.04.2008. u 08:36
> 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);
11.04.2008. u 08:36 

viking13
Aleksandar Milanovic
Novi Beograd

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



Profil

icon Re: Binarni zapis fajla11.04.2008. u 08:51
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 ®
11.04.2008. u 08:51 

stankons
Stanko Milošev
Trinet, Slovenija
Ljubljana

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

ICQ: 147767352
Sajt: www.milosev.com


Profil

icon Re: Binarni zapis fajla11.04.2008. u 10:46
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/
11.04.2008. u 10:46 

GyG@
Srbija

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



Profil

icon Re: Binarni zapis fajla14.04.2008. u 19:35
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
14.04.2008. u 19:35 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1101
*.adsl-4.sezampro.yu.



Profil

icon Re: Binarni zapis fajla15.04.2008. u 00:52
> 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š.
15.04.2008. u 00:52 

viking13
Aleksandar Milanovic
Novi Beograd

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



Profil

icon Re: Binarni zapis fajla15.04.2008. u 08:54
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 ®
15.04.2008. u 08:54 

GyG@
Srbija

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



Profil

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

schild
Dejan Schild
Subotica

Član broj: 59888
Poruke: 74
79.101.179.*

Sajt: www.topcode.co.yu


Profil

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

GyG@
Srbija

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



Profil

icon Re: Binarni zapis fajla15.04.2008. u 11:27
Pa moze i tako...
15.04.2008. u 11:27 

reiser
Vranje

Član broj: 7895
Poruke: 1885
77.46.248.*



Profil

icon Re: Binarni zapis fajla15.04.2008. u 12:35
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.
15.04.2008. u 12:35 

GyG@
Srbija

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



Profil

icon Re: Binarni zapis fajla16.04.2008. u 19:05
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

16.04.2008. u 19:05 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1101
*.adsl-1.sezampro.yu.



Profil

icon Re: Binarni zapis fajla16.04.2008. u 20:44
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.
16.04.2008. u 20:44 

reiser
Vranje

Član broj: 7895
Poruke: 1885
79.101.220.*



Profil

icon Re: Binarni zapis fajla16.04.2008. u 21:33
@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
16.04.2008. u 21:33 

GyG@
Srbija

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



Profil

icon Re: Binarni zapis fajla20.04.2008. u 21:11
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
20.04.2008. u 21:11 

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 1101
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Binarni zapis fajla21.04.2008. u 00:33
> 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*.

21.04.2008. u 00:33 

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

[ Pregleda: 808 | Odgovora: 15 ]

Postavi temu Odgovori

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