Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Sigurnost
  • Šta se opaža pri gledanju binarnih datoteka. Kako ažurirati binarnu SU datoteku na Androidu - vratite root pristup za aplikaciju SuperSu

Šta se opaža pri gledanju binarnih datoteka. Kako ažurirati binarnu SU datoteku na Androidu - vratite root pristup za aplikaciju SuperSu

Binarna datoteka je bilo koja datoteka na vašem računaru. Sve informacije na računaru i povezanim medijima snimaju se u bitovima (otuda i naziv). Međutim, za usporedbu, tekstualna datoteka se može pročitati u čitačima koji odgovaraju ekstenziji (najjednostavnijim - čak iu Notepadu), ali izvršna datoteka ne može. I iako je u stvari txt datoteka ista binarna datoteka, ali kada govore o problemu otvaranja sadržaja binarnih datoteka, misle izvršne datoteke kao i komprimirani podaci.

Trebaće ti

Instrukcije

  • Preuzmite program Hex Edit na tvrdi disk - uređivač datoteka koji predstavlja njihov sadržaj u binarnom obliku. Otvorite program dvostrukim klikom na početnu datoteku. Ovo softver omogućava vam čitanje binarnih datoteka u realnom vremenu, promjenu sadržaja, dodavanje vlastitih sopstvene evidencije i mnogo više. Da biste u potpunosti radili u ovom okruženju, morate znati nešto o tome opšti koncepti binarne datoteke.
  • Prozor programa se ne razlikuje mnogo od uobičajenog uređivača: poznati meni i panel s dugmadima, tijelo uređene datoteke, oznake i statusna traka. Otvoriti binarni fajl preko menija File ili klikom na odgovarajuću ikonu na panelu. Binarni fajl će se pojaviti pred vama kao nizovi sa brojevima i slovima. Nemojte brkati ove znakove sa odštampanim podacima. tekstualne datoteke... Mogu se uređivati ​​i brisanjem simbola, ali će se tako izbrisati ćelije sa podacima, dijelovi datoteke.
  • Napravite promjene u sadržaju datoteke. Aplikacija može prikazati važne dijelove datoteke za više zgodna pretraga a također ima fleksibilno prilagođavanje grafički prikaz binarni kod... Prebacite prikaz sadržaja na ASCII + IBM / OEM način da vidite programski kod fajl. Ako unesete pogrešne redove u datoteku, ona možda neće raditi ispravno, što će uzrokovati ozbiljne posljedice za operativni sistem PC.
  • Sačuvajte promjene. Ako nemate iskustva u uređivanju datoteka na ovaj način, budite spremni na to da se datoteka neće otvoriti i odbiti raditi nakon unošenja izmjena. Najvjerovatnije ćete zabrljati nekoliko kopija prije nego što završite posao. Pokušajte da ne sačuvate sve promjene na originalni fajl kako bi njegov sadržaj ostao nepromijenjen.
  • zapisa), onda je želja da se nekako smanji neiskorišteni, ali zauzeti memorijski prostor sasvim razumljiva.

    Pogotovo za takve slučajeve, postoje zapisi sa varijantnim dijelom.

    Opis zapisa sa varijantnim dijelom

    U odjeljku var zapis sa varijantnim dijelom opisati kako slijedi:

    var<имя_записи>: rekord<поле1>: <тип1>; [<поле2>: <тип2>;] [...] slučaj<поле_переключатель>: <тип>of<варианты1>: (<поле3>: <тип3>; <поле4>: <тип4>; ...); <варианты2>: (<поле5>: <тип5>; <поле6>: <тип6>; ...); [...] kraj;

    Nevarijantni dio evidencije (prije ključna riječ slučaju) poštuje ista pravila kao redovni ulazak... Uopšteno govoreći, nevarijantni dio može u potpunosti izostati.

    Varijanta dio počinje rezervisanim malim i malim slovima, nakon čega se označava polje zapisa koje će dalje služiti kao prekidač. Kao i kod običnog case iskaza, prekidač mora pripadati jednom od nabrojanih tipova podataka (vidjeti predavanje 3). Lista izbora može biti konstanta, raspon ili unija više konstanti ili raspona. Skup polja koja se moraju uključiti u strukturu zapisa, ako je izvršena odgovarajuća opcija, zaobljen je u zagradama.

    Primjer... Za opis sadržaja biblioteke potrebne su sljedeće informacije:

    Kolone "Naslov" i "Izdavač" su zajedničke za sve tri opcije, a ostala polja zavise od vrste štampanog izdanja. Za implementaciju ove strukture koristit ćemo unos sa varijantnim dijelom:

    tip biblio = naziv zapisa, izdavač: string; stavka slučaja: znak "b": (autor: string; godina: 0..2004); "n": (podaci: datum); "m": (godina: 1700..2004; mjesec: 1..12; broj: cijeli broj); kraj;

    Ovisno o vrijednosti polja stavke, zapis će sadržavati 4, 5 ili 6 polja.

    Mehanizam za korištenje zapisa sa varijantnim dijelom

    Broj bajtova koje je dodijelio kompajler za zapis sa varijantnim dijelom, određuje njegova "najduža" verzija. Kraći skupovi polja iz drugih varijanti zauzimaju samo dio dodijeljene memorije.

    U gornjem primjeru, "najduža" opcija je "b": zahtijeva 23 bajta (21 bajt za string i 2 bajta za cijeli broj). Za opcije "n" i "m" potrebno je 4 odnosno 5 bajtova (vidi tabelu).

    ime, izdavač stavka Varijanta dio
    ... "b" autor godine
    ... "n" podaci
    ... "m" godine mjesec broj
    ... "b" autor godine

    Binarni fajlovi

    Binarne datoteke pohranjuju informacije u obliku u kojem su predstavljene u memoriji računara i stoga su nezgodne za ljude. Gledajući u takav fajl, nemoguće je razumjeti šta je u njemu napisano; ne može se kreirati ili ispravljati ručno - u nekom uređivaču teksta - itd. Međutim, sve ove neugodnosti nadoknađuju se brzinom rada sa podacima.

    Također, tekstualne datoteke pripadaju strukturama sekvencijalni pristup, a binarni - direktni. To znači da se u svakom trenutku možete pozvati na bilo koga, a ne samo na trenutni element.

    Rad sa binarnim fajlovima

    Sve informacije se pohranjuju u računar u obliku 0 i 1, odnosno u binarnom obliku. Binarne datoteke se razlikuju od tekstualnih samo po načinu na koji rade s njima. Na primjer, ako zapišemo broj "4" u tekstualnu datoteku, onda se ona zapisuje kao znak, a za pohranjivanje je potreban jedan bajt. U skladu s tim, veličina datoteke će biti jednaka jednom bajtu. Tekstualna datoteka koja sadrži unos "145687" bit će veličine šest bajtova.

    Ako cijeli broj 145687 upišemo u binarnu datoteku, tada će ona imati veličinu od četiri bajta, jer je upravo to potrebno za pohranjivanje podataka tipa int. To jest, binarne datoteke su kompaktnije i u nekim slučajevima lakše za obradu.

    Snimanje standardni tipovi podatke u binarne datoteke

    Da biste otvorili binarnu datoteku, morate postaviti način pristupa na ios :: binary (u nekim C++ kompajlerima - ios :: bin).

    Da kreirate izlaznu datoteku, kreirajte objekat:

    ofstream outBinFile ("out.bin", ios :: out | ios :: binary);

    /* kreiranje objekata klase ofstream van. bin

    ako (! out_f í 1) // standardna provjera

    Podaci se zapisuju pomoću metode write (), koja ima dva parametra: prvi je pokazivač na početak (adresa početka) podataka koji se upisuju, drugi je broj bajtova koji se upisuju. U ovom slučaju, pokazivač mora biti eksplicitno konvertovan u tip char.

    Primjer 1. Upišite varijable različitih tipova u binarnu datoteku:

    ofstream outBinFile ("test.bin", ios :: out I

    ios:: binarni); / ^ kreiranje objekta klase od toka i pokušava da ga poveže sa fajlom test. bin u binarnom načinu pisanja * /

    int a - 145687; // deklarišemo cjelobrojnu varijablu a

    outBinFi le. napisati ((char *) & a, sizeof (a)); / ^ pisati u datoteku

    varijabla a kao tok bajtova, tj. upisivanje u datoteku internog prikaza cjelobrojne varijable a * / float x - 123,25; // stvarna deklaracija varijable NS

    outBinFile .write ((char *) & x, sizeof (x)); / ^ pisati u datoteku

    varijabla NS kao tok bajtova, tj. upisivanje u datoteku interne reprezentacije cjelobrojne varijable x * /

    // definiramo simboličku varijablu sa i inicijalizirajući ga simbolom g outBinFile.write ((char *) & c, sizeof (c));

    // napisati simbol g da fajl

    outBinFile.close (); return 0;

    Ako otvorite sadržaj testne .bin datoteke u uređivaču teksta, to će izgledati ovako:

    a veličina datoteke je 9 bajtova.

    Čitanje standardnih tipova podataka iz binarnih datoteka

    Da biste otvorili postojeću binarnu datoteku za čitanje, morate kreirati objekt:

    ifstream inpBinFile ("inp.bin", ios :: u I ios :: binarni);

    /* koristimo disjunkciju zastavica, što ukazuje da je datoteka otvorena za čitanje u binarnom obliku * /

    if (! inpBinFile)

    cout Za čitanje podataka koristite funkciju read (), koja ima parametre slične funkciji write ().

    #include koristeći prostor imena std; int main ()

    ifstream inpBinFile ("test.bin", ios :: u I

    ios:: binarni); / / otvorite datoteku za čitanje u binarnom obliku

    int a; float x; char sa = "g";

    inpBinFile.read ((char *) & a, sizeof (a));

    // čitanje cjelobrojne varijable inpBinFile.read ((char *) & x, sizeof (x));

    // čitanje realne varijable inpBinFile.read ((char *) & c, sizeof (c));

    // čitanje simboličke varijable

    inpBinFile.close (); cout

    Rezultat programa:

    a = 145687 x = 123,25 c = g

    Imajte na umu da se konverzija informacija ne događa kada se koriste funkcije pisanja i čitanja. Interni prikaz podataka se upisuje i čita u datoteku. Zato dva prethodni programi dao tačan rezultat.

    Pisanje i čitanje prilagođeni tipovi podatke u binarne datoteke

    Za razliku od tekstualnih datoteka, rad sa prilagođenim tipovima podataka pomoću binarnih datoteka ne razlikuje se od standardnih tipova podataka. Metode write () i read () se koriste na sličan način. Programer samo treba da naznači adresu memorijske oblasti koja će biti upisana i broj bajtova koji će biti upisani, vodeći računa da se ne dešava konverzija podataka, već se upisuje i čita samo interna reprezentacija informacija.

    Takođe, kada radite sa binarnim datotekama, mogu se koristiti metode seekg (), tellg (), seekp (), tellp ().

    Primjer 3. Napišite program koji zapisuje informacije o grupi turista u binarnu datoteku.

    fstream BinFile ("ankety.bin", ios :: in I ios :: out | ios :: binary);

    Anketa Gruppa =; za (int i = 0; i

    BinFile.write ((char *) & Gruppa [i], sizeof (Anketa)); BinFile.close (); return 0;

    Primjer 4. Datoteka "ankety.bin" sadrži podatke o grupi turista, potrebno ih je pročitati i prikazati.

    #include koristeći prostor imena std; struktura Anketa (

    char ime; int age;

    strukturirani tip podataka Anketa na ekran * /

    ostream & operater

    fstream BinFile ("ankety.bin", ios :: in | ios :: out | ios :: binarni); if (! BinFile)

    za (int i = 0; i

    // odmah pročitati sve zauzete bajtove varijabilni tip Anketa BinFile.read ((char *) & Gruppa [i], sizeof (Anketa));

    BinFile.close (); return 0;

    Rezultat programa:

    Ivanov, 23 Sidorov, 21 Petrov, 22

    Pritisnite bilo koji taster da nastavite. ... ...

    Razvijanje sopstvenih klasa za rad sa fajlovima

    Nezgodno je stalno koristiti metode write () i read (), mnogo je ugodnije moći koristiti operacije ">" po analogiji s tekstualnim datotekama. Dajemo primjer implementacije naše klase za rad sa binarnim datotekama.

    korištenje imenskog prostora std;

    struct Anketa // deklarirati strukturu za pohranjivanje informacija

    / * preopteretiti operaciju umetanja toka za korisnički izlaz

    strukturirani tip podataka Anketa na ekran * /

    ostream & operater

    class outBinaryFile: public od stream / ^ definiramo našu vlastitu klasu za rad s izlaznim binarnim datotekama. Generiramo ga iz klase za rad sa tokovima izlaznih datoteka * /

    / * kada opisujete konstruktor generirane klase, ne zaboravite pozvati konstruktor osnovne klase, proslijeđujući mu potrebne parametre * /

    outBinaryFile (char * ime): ofstream (ime, ios :: out I ios :: binary)

    // preopterećenje neophodne operacije kao metode klase outBinaryFile & operator

    napisati ((char *) & chislo, sizeof (chislo)); vrati * ovo;

    outBinaryFile & operator

    napisati ((char *) & ank, sizeof (ank)); vrati * ovo;

    klasa inpBinaryFile: public if stream / * definišemo našu klasu za rad sa ulaznim binarnim datotekama. Generiramo ga iz klase za rad sa tokovima ulaznih datoteka * /

    inpBinaryFile (char * ime): ifstream (ime, ios :: u I ios :: binarni)

    / * pozvati konstruktor osnovne klase sa potrebnim parametrima,

    dovoljno za konstruktora izvedene klase * /

    // preopteretiti potrebne operacije

    inpBinaryFile & operator >> (int & chislo)

    read ((char *) & chislo, sizeof (chislo)); vrati * ovo;

    inpBinaryFile & operator >> (Anketa & ank)

    read ((char *) & ank, sizeof (ank)); vrati * ovo;

    int a = 111, b = 112; outBinaryFile outFile ("dannye.bin");

    // otvorite datoteku za čitanje

    inpBinaryFile inpFile ("dannye.bin"); if (! inpFile)

    za (int í = 0; i

    inpFile >> a; // pročitajte upitnik iz datoteke

    cout // i prikazati ga na ekranu

    inpFile >> anketa; cout

    Rezultat programa:

    Kolja 1990, 582-78-95.

    Pritisnite bilo koji taster da nastavite. ... ...

    1. Da li je moguće koristiti operaciju u programu?

    ios :: u I ios :: van

    • a) da, u svakom slučaju;
    • b) da, ali samo kada radite sa tekstualnim datotekama;
    • c) ne, u svakom slučaju.
    • 2. Navedite ispravnu opciju za otvaranje tekstualne datoteke za čitanje:
      • a) ifstream inpF ("input.txt", ios :: in);
      • b) ifstream inpF ("input.txt", ios :: ulaz);
      • c) ifstream inpF (ios: in, "input.txt").

    H. Šta će biti prikazano kao rezultat izvršavanja sljedećeg koda?

    inputFile.get (c);

    sljedeći - inputFile.peek ();

    if (sljedeća == EOF)

    • a) sadržaj datoteke povezane sa inputFile streamom će biti prikazan jednom;
    • b) sadržaj datoteke pridružene inputFile streamu će biti prikazan na ekranu beskonačan broj jednom;
    • c) ništa neće biti prikazano na ekranu.
    • 4. Koliko karaktera ima u datoteci?
    • 12 3 4 5 6
    • a) 6;
    • b) 7;
    • u 11.
    • 5. Koje metode se mogu koristiti za određivanje kraja datoteke?
    • a) eof ();
    • b) dobro ();
    • c) obe ove metode.
    • 6. Čemu služi funkcija getline ()?
    • a) čita riječ iz datoteke;
    • b) čita cijeli sadržaj datoteke;
    • c) čita red iz datoteke.
    • 7. Za pisanje/čitanje prilagođenih tipova podataka u datoteku, morate:
      • a) preopteretiti operacije ">>" i "
      • b) pisanje i čitanje prilagođenih tipova podataka dostupni su bez dodatnih radnji;
      • c) pisanje i čitanje korisnički definiranih tipova podataka u datoteku nije moguće.
    • 8. Koje funkcije se koriste za pisanje/čitanje informacija u binarnom obliku?
    • a) printf / scanf;
    • b) pisati / čitati;
    • c) staviti / dobiti.
    • 1. Napišite program koji zapisuje slova engleske abecede u datoteku.
    • 2. Datoteka input.txt sadrži informacije od nekoliko tekstualni nizovi... Prikažite sadržaj ove datoteke na ekranu, izbrojite broj redova u datoteci.
    • 3. Disk sadrži datoteku result.txt sa rezultatima hemijskih eksperimenata. Napišite program koji kreira kopiju ove datoteke pod nazivom copy_resylt.txt.
    • 4. Unesite naziv datoteke pomoću tastature. V navedenu datoteku izbrisati sve parne linije.
    • 5. Napišite program koji zamjenjuje sve u tekstualnoj datoteci mala slova velika slova, i obrnuto.
    • 6. Originalna tekstualna datoteka sadrži brojeve razdvojene razmacima. Generirajte dva nova fajla: prvi treba da sadrži samo parne brojeve, a drugi - neparne.
    • 7. Realni brojevi se upisuju u datoteku. Napišite program koji odbacuje frakcijski dio imati ove brojeve i zapisati ih u novu datoteku.
    • 8. Tekstualni fajl sadrži informacije o letovima aviokompanije. Odaberite iz ovih podataka letove koji polaze popodne i prikažite ih na ekranu.
    • 9. Operatori preopterećenja >> i
    • 10. Napišite svoju klasu za rad sa binarnim datotekama.
    • 11. Napišite listu od 10 članova klase u tekstualnu i binarnu datoteku. Uporedite ove fajlove. Objasnite nastalu razliku.
    • 12. Razvijte klasu koja upisuje informacije o automobilima u datoteku (godina proizvodnje, marka, boja, itd.) u tekstualnu datoteku. U ovom slučaju, svaki simbol informacije zamjenjuje se vlastitim ABO 1-kodom. Prikažite rezultujuću datoteku na ekranu.

    Kontrolna pitanja

    • 1. Koje se klase koriste za rad sa tokovima datoteka?
    • 2. Koji načini pristupa se mogu koristiti pri radu sa datotekama? Navedite primjere.
    • 3. Koji metod se koristi za otvaranje datoteke? Navedite primjere.
    • 4. Koje su operacije dostupne za rad sa datotekama? Koje funkcije postoje za ove operacije?
    • 5. Koje metode vam omogućavaju da odredite kraj datoteke kada čitate informacije iz nje? Koja je razlika između ovih metoda? Navedite primjere.
    • 6. Kako možete čitati varijable standardnih tipova podataka iz tekstualnih datoteka?
    • 7. Mogu li se varijable korisnički definiranih tipova podataka čitati iz tekstualnih datoteka?
    • 8. Za koje su funkcije namijenjene nasumično čitanje informacije iz fajla? Navedite primjere.
    • 9. Koje su karakteristike binarnih datoteka? Koje su prednosti korištenja takvih datoteka?
    • 10. Koje funkcije se mogu koristiti za pisanje/čitanje informacija u binarne datoteke?
    • 11. Kako čitati varijable standardnih tipova podataka iz binarne datoteke?
    • 12. Koja razmatranja treba uzeti u obzir kada čitate prilagođene tipove podataka iz binarnih datoteka?
    • "Ivanov", 23), ("Sidorov", 21),

    Primjeri koje smo do sada razmatrali su demonstrirali formatirani unos/izlaz informacija u datoteke. Preporučljivo je koristiti formatiranu datoteku za unos/izlaz brojeva samo kada su njihova veličina i broj mali, kao i kada je potrebno obezbijediti mogućnost pregleda datoteka bez softverom... Inače, naravno, mnogo je efikasnije koristiti binarni I/O, u kojem se brojevi pohranjuju na isti način kao u OP računara, a ne u obliku nizova znakova. Da vas podsjetim da cjelobrojna (int) ili realna (float) vrijednost zauzima 4 bajta u memoriji, vrijednost tipa duplo Ima 8 bajtova, a vrijednost karaktera tipa char je 1 bajt. Na primjer, broj 12345 u tekstualnoj (formatiranoj) datoteci je 5 bajtova, au binarnoj datoteci 4 bajta.

    Binarni fajlovi, tj. datoteke u kojima su informacije pohranjene u internom obliku prezentacije koriste se za naknadnu upotrebu od strane softvera, ne mogu se pregledati od strane nesoftvera. Prednost binarnih datoteka je u tome što se, prvo, prilikom čitanja/pisanja ne gubi vrijeme na pretvaranje podataka iz simboličkog prikaza u interno i nazad, a drugo, nema gubitka preciznosti realnih brojeva. Kao iu slučaju formatiranog ulaza/izlaza, iu slučaju binarnog ulaza/izlaza, za "ispravnu" obradu informacija iz datoteke potrebno je znati koje vrste podataka, kako i kojim redoslijedom se upisuju u binarnu datoteku, posebno nakon pregleda binarne datoteke koristeći uređivač teksta neće dati ništa.

    Razmotrimo primjer koji pokazuje pisanje cjelobrojnih elemenata dinamičkog niza u binarnu datoteku i njihovo čitanje iz ove datoteke.

    #include

    #include

    #include

    korištenje imenskog prostora std;

    cout<< "Vvedite kol-vo elementov celochisl. massiva: "; cin >> N;

    int * mas = novi int [N];

    za (i = 0; i

    cout<< " Vvedite " << i << "-i element: "; cin >> mas [i];

    cout<< "\nIdet zapis dannyh v fail..." << endl;

    ofstream fout ("c: \\ os \\ bin.dat", ios :: binarni);// stvoriti van. binarni tok

    if (! fout) (cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

    fout.write (reinterpret_cast (mas), N * sizeof (int));// zapis niza u datoteku

    fout.close ();// zatvori tok

    cout<< "Dannye uspeshno zapisany!" << endl;

    za (i = 0; i

    ifstream fin ("c: \\ os \\ bin.dat", ios :: binarni); // kreiramo stream za čitanje datoteke

    ako (! fin) (cout<< "\n Oshibka otkrytiya faila!"; getch(); return 1; }

    cout<< "Fail sodergit:" << endl;

    fin.read (reinterpret_cast (mas), N * sizeof (int));// čitanje niza iz datoteke

    za (i = 0; i

    gettch (); return 0;

    Posebnu pažnju u ovom programu treba posvetiti upotrebi funkcija write () (metod ofstream class) i read () (metoda ifstream klase). Ove funkcije razmišljaju o podacima u terminima bajtova i dizajnirane su za prijenos određenog broja bajtova iz bafera podataka u datoteku i obrnuto. Parametri ovih funkcija su adresa bafera i njegova dužina u bajtovima.

    Funkcija write () je dizajnirana da u datoteku upiše broj bajtova specificiranih u drugom parametru od specificiranog u prvom parametru adrese bafer podataka, a funkcija read () služi za čitanje podataka iz datoteke. Ovdje treba napomenuti da ove funkcije rade samo na baferu podataka tipa char. U tom smislu, u ovom programu koristili smo operator reinterpret_cast<> koji pretvara naš bafer podataka tipa int (mas) u bafer tipa char.

    Treba imati na umu da tip kastinga koristi operator reinterpret_cast je potrebno samo u slučajevima kada je prvi parametar funkcije pisati () i pročitaj () nije niz znakova (na kraju krajeva, znak tipa char zauzima samo 1 bajt). Osim toga, ako je potrebno pisati ili čitati ne niz, već zasebne varijable, tada morate koristiti referentni mehanizam (referencu na adresu međuspremnika podataka), na primjer:

    ofstream fout (ime datoteke, ios :: app | ios :: binarni);

    fout.write (reinterpret_cast (& cb), sizeof (float));

    Sada je potrebno razgovarati o drugom parametru razmatranih funkcija. U ovom programu, kao drugi parametar, koristili smo izraz N * sizeof (int), sa kojim smo izračunali broj bajtova. Na primjer, ako imamo 5 cjelobrojnih elemenata niza, tada će broj bajtova biti 20. Funkcija sizeof () vraća broj bajtova dodijeljenih za tip podataka specificiran kao parametar. Na primjer sizeof ( int) će vratiti 4.

    Dakle, program prikazan u ovom primjeru omogućava vam da upišete podatke u binarnom obliku u datoteku bin.dat i pročitate ih iz ove binarne datoteke. Štaviše, nakon čitanja, ovi podaci se pretvaraju u tip int, dobijaju strukturu niza i sa njim se mogu izvoditi sve operacije.

    Sada zamislite da trebate napisati program koji vam omogućava čitanje podataka iz datoteke bin.dat, a znamo samo da ova datoteka sadrži elemente niza cijelih brojeva u binarnom obliku. Broj snimljenih elemenata ( N ) Ne znamo... Prilikom kreiranja programa nemamo pravo koristiti konstantan niz, tj. dodijeliti memoriju za to u fazi kreiranja programa. To će dovesti do pogrešnog rezultata. Budući da će premala vrijednost N dovesti do činjenice da se ne broje svi elementi niza, a prevelika vrijednost N će dovesti do popunjavanja dodatnih ćelija slučajnim vrijednostima.

    Razmotrimo primjer programa koji vam omogućava da čitate elemente niza cijelih brojeva iz binarne datoteke dinamičkim dodjeljivanjem memorije i da biste dokazali realističnost pročitanih podataka, izračunajte njihov zbir.

    #include

    #include

    #include

    korištenje imenskog prostora std;

    int N, i, suma = 0, dfb; // dfb - dužina datoteke u bajtovima

    ifstream fin ("c: \\ os \\ bin.dat", ios :: binarni);

    ako (! fin) (cout<< "Oshibka otkrytiya faila!"; getch(); return 1; }

    fin.seekg (0, ios :: kraj);// postavlja poziciju čitanja do kraja datoteke (od kraja 0 bajtova)

    dfb = fin.tellg ();// dobijemo vrijednost pozicije kraja datoteke (u bajtovima)

    N = dfb / 4;// znajući da cijeli broj zauzima 4 bajta, izračunaj broj brojeva

    int * arr = novi int [N];// kreiramo dinamički niz

    fin.seekg (0, ios :: beg);// prije čitanja podataka, pomjeramo trenutnu poziciju na početak datoteke

    fin.read (reinterpret_cast (arr), dfb);

    cout<< "Iz faila schitano " << N << " elementov:" << endl;

    za (i = 0; i

    za (i = 0; i

    cout<< "\n Ih summa = " << sum;

    gettch (); return 0;

    Razmotrimo ovaj program detaljno, u kojem smo aktivno koristili funkcije seekg () i tellg (), koje su metode ifstream klase. Ovdje treba napomenuti da sa bilo kojom datotekom kada se otvori, pridružuje se takozvana trenutna pozicija čitanja ili pisanja... Kada se datoteka otvori za čitanje, ova pozicija je po defaultu postavljena na početak datoteke. Ali vrlo često je potrebno ručno kontrolisati poziciju da biste mogli čitati i pisati, počevši od proizvoljne lokacije u datoteci. Seekg () i tellg () funkcije vam omogućavaju da postavite i provjerite trenutni pokazivač čitanja, a funkcije seekp () i tellp () rade isto za pokazivač pisanja.

    Seekg (1_parameter, 2_parameter) metoda pomiče trenutnu poziciju čitanja iz datoteke za broj bajtova specificiranih u 1_parameter u odnosu na lokaciju specificiranu u 2_option. 2_parametar može uzeti jednu od tri vrijednosti:

    ios :: beg - od početka fajla;

    ios :: cur - sa trenutne pozicije;

    ios :: end - sa kraja fajla.

    Ovdje su beg, cur i end konstante definirane u klasi ios, a simboli :: označavaju operaciju pristupa ovoj klasi. Na primjer, operater fin.seekg (-10, ios :: kraj); omogućava vam da postavite trenutnu poziciju čitanja iz datoteke 10 bajtova prije kraja datoteke.

    Vratimo se sada na opis programa. Na osnovu činjenice da ne znamo broj brojeva upisanih u datoteku, prvo moramo saznati broj brojeva. Da biste to učinili, koristite fin.seekg (0, ios :: kraj); prelazimo na kraj datoteke i koristimo funkciju tellg () da vratimo dužinu datoteke u bajtovima u dfb varijablu. Telg () funkcija vraća trenutnu poziciju pokazivača u bajtovima. Pošto znamo dužinu jednog cijelog broja u bajtovima (4 bajta), lako je izračunati broj brojeva upisanih u datoteku, znajući dužinu datoteke u bajtovima ( N = dfb / 4;). Nakon što smo saznali broj brojeva, kreiramo dinamički niz i prelazimo na početak datoteke kako bismo počeli čitati podatke pomoću funkcije read (). Nakon što se naznačeni broj bajtova podataka (dfb) prenese u bafer podataka (arr), na ovaj način pročitani podaci dobijaju strukturu niza i postaju potpuno pogodni za bilo koju vrstu operacija i transformacija.

    Fajlovi. Istovremeno, sa stanovišta tehničke implementacije na nivou hardvera, tekstualne datoteke su poseban slučaj binarnih datoteka, pa je stoga, u širem smislu riječi, svaka datoteka pogodna za definiciju „binarne datoteke“. fajl”.

    Binarne datoteke se često nazivaju izvršnim datotekama i komprimiranim podacima, ali nije ispravno ograničavati ovaj koncept tako.

    Vizualizacija

    Za vizuelni prikaz binarne datoteke, ona je podeljena na delove jednake veličine, predstavljene kao brojevi, obično napisani u heksadecimalnom, ponekad u oktalnom, binarnom ili decimalnom obliku. Navedena veličina komada može biti jedan oktet, kao i dva ili četiri (u slučaju podjele na dijelove od nekoliko okteta, primjenjuje se redoslijed bajtova korištene platforme). Zavisnost raspona predstavljenih brojeva od veličine komada prikazana je u tabeli:

    okteti broj bitova heksadecimalni oktalno decimalni
    nepotpisan
    decimalni
    iconic
    1 8 00

    FF
    000

    377
    0

    255
    -128

    127
    2 16 0000

    Fffff
    000000

    177777
    0

    65535
    -32768

    32767
    4 32 00000000

    FFFFFFFF
    00000000000

    37777777777
    0

    4294967295
    -2147483648

    2147483647

    Često se, osim numeričkih vrijednosti bajtova, prikazuju i znakovi kodne stranice, na primjer, ispisani ASCII znakovi na desnoj strani) početka PNG datoteke logotipa Wikipedije:

    00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 | .PNG ........ IHDR | 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f | ................ | 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 | ..... gAMA ..... OX | 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2 .... tEXtSoftwar | 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 e.Adobe ImageRea | 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 | dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |[email protected]@@ ... OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>: 99 ...... 55 | 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777 ... %%% ... | 000000a0 27 27 27 1a 1a 1a 38 38 38 2a 2a 2a 08 08 08 20 | "" "... 888 *** ... | 000000b0 20 20 17 17 17 2e 1 8bb | .............. |

    Instrumenti

    Za vizualizaciju

    • otklanjanje grešaka (na Microsoft Windows, djelomično)
    • hexdump (na GNU / Linuxu, itd.)

    Za uređivanje

    Književnost

    • Websterov novi svjetski rječnik kompjuterskih termina, 4. Ed, Prentice Hall, NY, 1992. ISBN 0-671-84651-5
    • Leontyev B.K. Formati datoteka Microsoft Windows XP: Priručnik, Moskva: ZAO "New Publishing House", 2005. ISBN 5-9643-0059-6

    Wikimedia fondacija. 2010.

    Pogledajte šta je "binarni fajl" u drugim rječnicima:

      Noun., M., Uptr. cf. često Morfologija: (ne) šta? fajl, zar ne? fajl, (vidi) šta? file than? fajl, o čemu? o fajlu; pl. šta? fajlovi, (ne) šta? datoteke nego? datoteke, (vidi) šta? datoteke nego? fajlovi, šta je sa? o fajlovima 1. Niz se naziva fajl ... ... Dmitrijev objašnjavajući rečnik

      Binarna (binarna) datoteka u širem smislu: niz proizvoljnih bajtova. Naziv je nastao zbog činjenice da se bajtovi sastoje od bitova, odnosno binarnih (engleskih binarnih) cifara. U užem smislu riječi, binarne datoteke su suprotne tekstualnim datotekama. ... ... Wikipedia

      Binarna (binarna) datoteka u širem smislu: niz proizvoljnih bajtova. Naziv je nastao zbog činjenice da se bajtovi sastoje od bitova, odnosno binarnih (engleskih binarnih) cifara. U užem smislu riječi, binarne su suprotne ... ... Wikipedia

      konfiguracioni fajl- Binarna ili tekstualna datoteka koja sadrži informacije koje određuju ponašanje aplikacije, računara ili mrežnog uređaja. Računarske mrežne teme EN konfiguracijski fajl ... Vodič za tehničkog prevodioca

      Ovaj izraz ima druga značenja, vidi IPA (višeznačna odrednica). .IPA je Appleov format datoteke arhive aplikacija za iPhone, iPod Touch i iPad. Fajlovi sa ovom ekstenzijom se pohranjuju u App Store i preuzimaju pomoću iTunes-a za ... ... Wikipedia

      Ovaj članak ili odjeljak treba revidirati. U Pascalu nema modula, OOP-a i drugih novonastalih trendova. Opisi ekstenzija treba da budu prisutni samo u člancima o odgovarajućim ... Wikipediji

      Pascal Semantika: proceduralni Tip izvršenja: kompajler Uveden: 1970. Autor(i): Niklaus Wirth Pascal je programski jezik opšte namene visokog nivoa. Jedan od najpoznatijih programskih jezika, široko ... ... Wikipedia

      Gopher Naziv: Gopher Port / ID: 70 / TCP Specifikacija: RFC 1436 Osnovne implementacije (klijenti): Mozilla Firefox, Microsoft Windows: IE 5.x, IE 6 (ograničeno na MS) ... Wikipedia

      Naziv: Gopher Port / ID: 70 / TCP Specifikacija: RFC 1436 Osnovne implementacije (klijenti): Mozilla Firefox, Microsoft Windows: Internet Explorer 5.x, Internet Explorer 6 (MS ograničen) Gopher mrežni protokol za distribuirano pretraživanje i prijenos... ... Wikipedia

      - / * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Napomena: Pošto ekstenzija naziva datoteke može biti bilo koja, lista nije potpuna ... Wikipedia

    Top srodni članci