Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Siguranță
  • Ce se observă la vizualizarea binarelor. Cum să actualizați un fișier SU binar pe Android - restabiliți accesul root pentru aplicația SuperSu

Ce se observă la vizualizarea binarelor. Cum să actualizați un fișier SU binar pe Android - restabiliți accesul root pentru aplicația SuperSu

Un fișier binar este orice fișier de pe computer. Toate informațiile de pe un computer și mediile aferente sunt înregistrate în biți (de unde și numele). Totuși, spre comparație, un fișier text poate fi citit în cititoarele corespunzătoare extensiei (cele mai simple – chiar și în Notepad), dar fișierul executabil nu poate. Și, deși, de fapt, fișierul txt este același fișier binar, dar când vorbesc despre problema deschiderii conținutului fișierelor binare, înseamnă fișiere executabile precum și date comprimate.

Vei avea nevoie

Instrucțiuni

  • Descărcați programul Hex Edit pe hard disk - un editor de fișiere care reprezintă conținutul lor în formă binară. Deschideți programul făcând dublu clic pe fișierul de pornire. Acest software vă permite să citiți fișiere binare în timp real, să schimbați conținutul, să adăugați al dvs propriile înregistrăriși mult mai mult. Pentru a lucra pe deplin în acest mediu, trebuie să știți puțin despre concepte generale fișiere binare.
  • Fereastra programului nu este mult diferită de editorul obișnuit: meniul familiar și panoul cu butoane, corpul fișierului editat, marcaje și bara de stare. Deschide fisier binar prin meniul Fișier sau făcând clic pe pictograma corespunzătoare din panou. Fișierul binar va apărea în fața dvs. ca șiruri de caractere cu cifre și litere. Nu confundați aceste caractere cu datele tipărite. fișiere text... Ele pot fi editate și prin ștergerea simbolurilor, dar aceasta va șterge celulele cu date, bucăți din fișier.
  • Efectuați modificări la conținutul fișierului. Aplicația poate afișa părți importante ale fișierului pentru mai multe căutare convenabilăși are, de asemenea, personalizare flexibilă afișaj grafic cod binar... Comutați vizualizarea conținutului în modul ASCII + IBM / OEM pentru a vedea codul programului fişier. Dacă introduceți linii greșite în fișier, este posibil să nu funcționeze corect, provocând consecințe grave pentru sistem de operare calculator personal.
  • Salvați modificările. Dacă nu aveți experiență în editarea fișierelor în acest fel, fiți pregătit pentru ca fișierul să nu se deschidă și să refuze să funcționeze după efectuarea modificărilor. Cel mai probabil, veți strica câteva copii înainte de a termina treaba. Încercați să nu salvați toate modificările în dosarul original pentru a-și păstra conținutul neschimbat.
  • înregistrări), atunci dorința de a reduce cumva spațiul de memorie nefolosit, dar ocupat este destul de de înțeles.

    Mai ales pentru astfel de cazuri, există înregistrări cu parte variantă.

    Descrierea unei înregistrări cu o parte variantă

    In sectiunea var înregistrare cu parte variantă descrieți după cum urmează:

    var<имя_записи>: record<поле1>: <тип1>; [<поле2>: <тип2>;] [...] caz<поле_переключатель>: <тип>de<варианты1>: (<поле3>: <тип3>; <поле4>: <тип4>; ...); <варианты2>: (<поле5>: <тип5>; <поле6>: <тип6>; ...); [...] Sfârșit;

    Parte nevariantăînregistrări (înainte cuvânt cheie caz) respectă aceleași reguli ca intrare regulată... În general, partea nevariantă poate lipsi cu totul.

    Partea variantaîncepe cu cuvântul caz rezervat, după care este indicat câmpul înregistrării, care va servi în continuare ca comutare. Ca și în cazul unei declarații de caz obișnuite, comutatorul trebuie să aparțină unuia dintre tipuri enumerate date (vezi Cursul 3). Lista de opțiuni poate fi o constantă, un interval sau uniunea mai multor constante sau intervale. Setul de câmpuri care trebuie incluse în structura înregistrării, dacă a fost efectuată opțiunea corespunzătoare, este cuprins între paranteze.

    Exemplu... Pentru a descrie conținutul bibliotecii, sunt necesare următoarele informații:

    Coloanele „Titlu” și „Editor” sunt comune tuturor celor trei opțiuni, iar restul câmpurilor depind de tipul ediției tipărite. Pentru a implementa această structură, vom folosi intrare cu parte variantă:

    tip biblio = nume înregistrare, editor: șir; item case: char of "b": (autor: șir; an: 0..2004); "n": (date: data); "m": (anul: 1700..2004; luna: 1..12; număr: întreg); Sfârșit;

    În funcție de valoarea câmpului articolului, înregistrarea va conține fie 4, 5 sau 6 câmpuri.

    Mecanismul de utilizare a unei înregistrări cu o parte variantă

    Numărul de octeți alocați de compilator pentru înregistrare cu parte variantă, este determinată de versiunea sa „cea mai lungă”. Seturi mai scurte de câmpuri din alte variante ocupă doar o fracțiune din memoria alocată.

    În exemplul de mai sus, opțiunea „cea mai lungă” este „b”: necesită 23 de octeți (21 de octeți pentru un șir și 2 octeți pentru un număr întreg). Pentru opțiunile „n” și „m”, sunt necesari 4 și, respectiv, 5 octeți (vezi tabel).

    nume, editor articol Partea varianta
    ... "b" autor an
    ... "n" date
    ... "m" an lună număr
    ... "b" autor an

    Fișiere binare

    Fișierele binare stochează informații în forma în care acestea sunt reprezentate în memoria computerului și, prin urmare, sunt incomode pentru oameni. Privind într-un astfel de fișier, este imposibil să înțelegem ce este scris în el; nu poate fi creat sau corectat manual - într-un editor de text - etc. Cu toate acestea, toate aceste inconveniente sunt compensate de viteza de lucru cu datele.

    De asemenea, fișierele text aparțin structurilor acces secvenţial, și binar - direct. Aceasta înseamnă că în orice moment vă puteți referi la oricine, nu doar la elementul curent.

    Lucrul cu fișiere binare

    Toate informațiile sunt stocate în computer sub formă de 0 și 1, adică în formă binară. Fișierele binare diferă de fișierele text doar prin modul în care funcționează cu ele. De exemplu, dacă scriem numărul „4” într-un fișier text, atunci acesta este scris ca caracter și este nevoie de un octet pentru a-l stoca. În consecință, dimensiunea fișierului va fi egală cu un octet. Fișierul text care conține intrarea „145687” va avea o dimensiune de șase octeți.

    Dacă scriem numărul întreg 145687 într-un fișier binar, atunci acesta va avea o dimensiune de patru octeți, deoarece acesta este exact cât este necesar pentru a stoca date de tip int. Adică, binarele sunt mai compacte și, în unele cazuri, mai ușor de procesat.

    Înregistrare tipuri standard date în binare

    Pentru a deschide un fișier binar, trebuie să setați modul de acces la ios :: binary (în unele compilatoare C ++ - ios :: bin).

    Pentru a crea un fișier de ieșire, creați un obiect:

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

    /* crearea obiectelor de clasă ofstream afară. cos

    dacă (! out_f і 1) // verificare standard

    Datele sunt scrise folosind metoda write (), care are doi parametri: primul este un pointer către începutul (adresa începutului) al datelor care sunt scrise, al doilea este numărul de octeți care urmează să fie scrieți. În acest caz, indicatorul trebuie convertit în mod explicit la tipul char.

    Exemplul 1. Scrieți variabile de diferite tipuri într-un fișier binar:

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

    ios:: binar); / ^ creează obiectul clasei de pârâu și încercând să-l conectăm la fișier Test. cos în modul de scriere binar * /

    int a - 145687; // declară o variabilă întreagă A

    outBinFi le. scrieți ((car *) și a, dimensiunea (a)); / ^ scrie în fișier

    variabil A ca un flux de octeți, adică scrierea într-un fișier a reprezentării interne a unei variabile întregi a * / float x - 123,25; // declarație de variabilă reală X

    outBinFile .write ((car *) & x, dimensiunea (x)); / ^ scrie în fișier

    variabil X ca un flux de octeți, adică scrierea într-un fișier a reprezentării interne a unei variabile întregi x * /

    // definește o variabilă simbolică Cu şi iniţializandu-l cu simbolul g outBinFile.write ((car *) & c, dimensiunea (c));

    // scrie un simbol g la dosar

    outBinFile.close (); returnează 0;

    Dacă deschideți conținutul fișierului .bin de test cu un editor de text, atunci va arăta astfel:

    iar dimensiunea fișierului este de 9 octeți.

    Citirea tipurilor de date standard din fișiere binare

    Pentru a deschide un fișier binar existent pentru citire, trebuie să creați un obiect:

    ifstream inpBinFile ("inp.bin", ios :: în I ios :: binar);

    /* folosim o disjuncție de steaguri, indicând faptul că fișierul este deschis pentru citire în formă binară * /

    dacă (! inpBinFile)

    cout Pentru a citi datele, utilizați funcția read (), care are parametri similari cu funcția write ().

    #include folosind namespace std; int main ()

    ifstream inpBinFile ("test.bin", ios :: în I

    ios:: binar); / / deschide fișierul pentru citire în formă binară

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

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

    // citește o variabilă întreagă inpBinFile.read ((car *) & x, dimensiunea (x));

    // citește o variabilă reală inpBinFile.read ((car *) & c, dimensiunea (c));

    // citește o variabilă simbolică

    inpBinFile.close (); cout

    Rezultatul programului:

    a = 145687 x = 123,25 c = g

    Rețineți că nu are loc conversie de informații atunci când utilizați funcțiile de scriere și citire. Reprezentarea internă a datelor este scrisă și citită în fișier. De aceea doi programele anterioare a dat rezultatul corect.

    Scrierea și lectura tipuri personalizate date în binare

    Spre deosebire de fișierele text, lucrul cu tipuri de date personalizate folosind fișiere binare nu este diferit de tipurile de date standard. Metodele de scriere () și citire () sunt utilizate în mod similar. Programatorul trebuie doar să indice adresa zonei de memorie care urmează să fie scrisă și numărul de octeți care urmează să fie scris, ținând cont că nu are loc conversia datelor, se scrie și se citește doar reprezentarea internă a informațiilor.

    De asemenea, atunci când lucrați cu fișiere binare, se pot folosi metodele seekg (), tellg (), seekp (), tellp ().

    Exemplul 3. Scrieți un program care scrie informații despre un grup de turiști într-un fișier binar.

    fstream BinFile ("ankety.bin", ios :: în I ios :: out | ios :: binar);

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

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

    Exemplul 4. Fișierul „ankety.bin” conține date despre un grup de turiști, este necesar să le citiți și să le afișați.

    #include folosind namespace std; struct Anketa (

    nume char; int vârsta;

    tip de date structurate Anketa pe ecran */

    ostream și operator

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

    pentru (int i = 0; i

    // citește imediat toți octeții ocupați tip variabil Anketa BinFile.read ((char *) & Gruppa [i], sizeof (Anketa));

    BinFile.close (); returnează 0;

    Rezultatul programului:

    Ivanov, 23 Sidorov, 21 Petrov, 22

    Apăsați orice tastă pentru a continua. ... ...

    Dezvoltarea propriilor clase pentru lucrul cu fișiere

    Este incomod să folosești în mod constant metodele de scriere () și citire (), este mult mai plăcut să poți folosi operațiunile „>” prin analogie cu fișierele text. Să dăm un exemplu de implementare a clasei noastre pentru lucrul cu binare.

    folosind namespace std;

    struct Anketa // declară o structură pentru stocarea informațiilor

    / * supraîncărcați operația de inserare a fluxului pentru ieșirea utilizatorului

    tip de date structurate Anketa pe ecran */

    ostream și operator

    clasa outBinaryFile: public of stream / ^ definim propria noastră clasă pentru a lucra cu binare de ieșire. Îl generăm din clasa pentru a lucra cu fluxuri de fișiere de ieșire * /

    / * când descrieți constructorul clasei generate, nu uitați să apelați constructorul clasei de bază, trecându-i parametrii necesari * /

    outBinaryFile (car * nume): ofstream (nume, ios :: out I ios :: binar)

    // supraîncărcare operațiunile necesare ca metode de clasă outBinaryFile și operator

    scrie ((char *) & chislo, sizeof (chislo)); returnează * aceasta;

    outBinaryFile și operator

    scrie ((char *) & ank, sizeof (ank)); returnează * aceasta;

    clasa inpBinaryFile: public dacă stream / * definim clasa noastră pentru lucrul cu binare de intrare. Îl generăm din clasă pentru a lucra cu fluxuri de fișiere de intrare * /

    inpBinaryFile (car * nume): ifstream (nume, ios :: în I ios :: binar)

    / * apelează constructorul clasei de bază cu parametrii necesari,

    suficient pentru constructorul clasei derivate * /

    // supraîncărcați operațiunile necesare

    inpBinaryFile și operator >> (int & chislo)

    read ((char *) & chislo, sizeof (chislo)); returnează * aceasta;

    inpBinaryFile și operator >> (Anketa și ank)

    read ((char *) & ank, sizeof (ank)); returnează * aceasta;

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

    // deschide fișierul pentru citire

    inpBinaryFile inpFile ("dannye.bin"); dacă (! inpFile)

    pentru (int і = 0; i

    inpFile >> a; // citește chestionarul din dosar

    cout // și afișează-l pe ecran

    inpFile >> anketa; cout

    Rezultatul programului:

    Kolya 1990, 582-78-95.

    Apăsați orice tastă pentru a continua. ... ...

    1. Este posibil să folosiți o operație în program?

    ios :: în I ios :: afară

    • a) da, în orice caz;
    • b) da, dar numai atunci când lucrați cu fișiere text;
    • c) nu, în orice caz.
    • 2. Specificați opțiunea corectă pentru deschiderea unui fișier text pentru citire:
      • a) ifstream inpF ("input.txt", ios :: in);
      • b) ifstream inpF ("input.txt", ios :: input);
      • c) ifstream inpF (ios: in, "input.txt").

    H. Ce va fi afișat ca rezultat al executării următorului cod?

    inputFile.get (c);

    următorul - inputFile.peek ();

    dacă (următorul == EOF)

    • a) conținutul fișierului asociat fluxului inputFile va fi afișat o dată;
    • b) conținutul fișierului asociat fluxului inputFile va fi afișat pe ecran număr infinit o singura data;
    • c) nu va fi afișat nimic pe ecran.
    • 4. Câte caractere sunt în fișier?
    • 12 3 4 5 6
    • a) 6;
    • b) 7;
    • la 11.
    • 5. Ce metode pot fi folosite pentru a determina sfârșitul fișierului?
    • a) eof ();
    • b) bun ();
    • c) ambele metode.
    • 6. Pentru ce este funcția getline ()?
    • a) citește un cuvânt dintr-un fișier;
    • b) citește întregul conținut al fișierului;
    • c) citește o linie dintr-un fișier.
    • 7. Pentru a scrie/citi tipuri de date personalizate într-un fișier, trebuie să:
      • a) supraîncărcați operațiunile „>>” și ​​„
      • b) scrierea și citirea tipurilor de date personalizate sunt disponibile fără acțiuni suplimentare;
      • c) scrierea și citirea tipurilor de date definite de utilizator într-un fișier nu este posibilă.
    • 8. Ce funcții sunt folosite pentru a scrie / citi informații în formă binară?
    • a) printf / scanf;
    • b) scrie/citește;
    • c) pune/primi.
    • 1. Scrieți un program care scrie litere ale alfabetului englez într-un fișier.
    • 2. Fișierul input.txt conține informații de la mai multe șiruri de text... Afișați conținutul acestui fișier pe ecran, numărați numărul de linii din fișier.
    • 3. Discul conține fișierul result.txt cu rezultatele experimentelor chimice. Scrieți un program care creează o copie a acestui fișier numit copy_resylt.txt.
    • 4. Introduceți numele fișierului folosind tastatura. V fișierul specificatșterge toate liniile pare.
    • 5. Scrieți un program care înlocuiește totul dintr-un fișier text literă mică majuscule și invers.
    • 6. Fișierul text original conține numere separate prin spații. Generați două fișiere noi: primul ar trebui să conțină numai numere pare, iar al doilea - impare.
    • 7. Numerele reale sunt scrise în fișier. Scrieți un program care elimină parte fracționată aveți aceste numere și scrieți-le într-un fișier nou.
    • 8. Fișierul text conține informații despre zborurile companiei aeriene. Selectați dintre aceste date zboruri care pleacă după-amiaza și afișați-le pe ecran.
    • 9. Operatori de supraîncărcare >> și
    • 10. Scrie-ți propria clasă pentru a lucra cu binare.
    • 11. Scrieți o listă cu 10 membri ai clasei într-un fișier text și într-un fișier binar. Comparați aceste fișiere. Explicați diferența rezultată.
    • 12. Dezvoltați o clasă care scrie informații despre mașini într-un fișier (an de fabricație, marca, culoare etc.) într-un fișier text. În acest caz, fiecare simbol al informației este înlocuit cu propriul său cod ABO 1. Afișați fișierul rezultat pe ecran.

    Întrebări de control

    • 1. Ce clase sunt folosite pentru a lucra cu fluxuri de fișiere?
    • 2. Ce moduri de acces pot fi folosite atunci când lucrați cu fișiere? Dă exemple.
    • 3. Ce metodă este folosită pentru a deschide fișierul? Dă exemple.
    • 4. Ce operațiuni sunt disponibile pentru lucrul cu fișiere? Ce funcții există pentru aceste operații?
    • 5. Ce metode vă permit să determinați sfârșitul fișierului atunci când citiți informații din acesta? Care este diferența dintre aceste metode? Dă exemple.
    • 6. Cum puteți citi variabilele tipurilor de date standard din fișierele text?
    • 7. Pot fi citite variabile de tip de date definite de utilizator din fișiere text?
    • 8. Ce funcții sunt destinate citit aleatoriu informatii din dosar? Dă exemple.
    • 9. Care sunt caracteristicile binarelor? Care sunt avantajele utilizării unor astfel de fișiere?
    • 10. Ce funcții pot fi folosite pentru a scrie / citi informații în fișiere binare?
    • 11. Cum se citesc variabilele tipurilor de date standard dintr-un fișier binar?
    • 12. Ce considerente ar trebui să luați în considerare atunci când citiți tipuri de date personalizate din fișiere binare?
    • „Ivanov”, 23), („Sidorov”, 21),

    Exemplele pe care le-am luat în considerare până acum au demonstrat intrarea/ieșirea formatată a informațiilor în fișiere. Este recomandabil să utilizați fișierul formatat de intrare/ieșire a numerelor numai atunci când dimensiunea și numărul lor sunt mici și, de asemenea, atunci când este necesar să oferiți posibilitatea de a vizualiza fișiere fără prin software... Altfel, desigur, este mult mai eficient să folosiți I/O binare, în care numerele sunt stocate în același mod ca în OP-ul computerului, și nu sub formă de șiruri de caractere. Permiteți-mi să vă reamintesc că o valoare întreagă (int) sau reală (float) ocupă 4 octeți în memorie, valoarea de tip dublu Are 8 octeți, iar valoarea caracterului de tip char este de 1 octet. De exemplu, numărul 12345 dintr-un fișier text (formatat) este de 5 octeți, iar într-un fișier binar este de 4 octeți.

    Fișiere binare, adică fișierele în care informațiile sunt stocate sub formă internă de prezentare sunt folosite pentru utilizare ulterioară de către software, nu pot fi vizualizate de non-software. Avantajul fișierelor binare este că, în primul rând, la citire/scriere, nu se pierde timpul cu conversia datelor din reprezentarea simbolică în internă și înapoi și, în al doilea rând, nu există pierderi de precizie a numerelor reale. Ca și în cazul intrării/ieșirii formatate, și în cazul intrării/ieșirii binare, pentru prelucrarea „corectă” a informațiilor din fișier, este necesar să se cunoască ce tipuri de date, cum și în ce secvență sunt scrise. un fișier binar, mai ales că vizualizarea unui fișier binar utilizând editor de text nu va da nimic.

    Luați în considerare un exemplu care demonstrează scrierea elementelor întregi ale unui tablou dinamic într-un fișier binar și citirea lor din acest fișier.

    #include

    #include

    #include

    folosind namespace std;

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

    int * mas = new int [N];

    pentru (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 :: binar);// crea afară. flux binar

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

    fout.write (reinterpret_cast (mas), N * sizeof (int));// scrieți matrice în fișier

    fout.close ();// închide fluxul

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

    pentru (i = 0; i

    ifstream fin ("c: \\ os \\ bin.dat", ios :: binar); // creează un flux pentru a citi fișierul

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

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

    fin.read (reinterpret_cast (mas), N * sizeof (int));// citește matricea din fișier

    pentru (i = 0; i

    getch (); returnează 0;

    O atenție deosebită în acest program ar trebui acordată utilizării funcțiilor de scriere () (metoda ofstream class) și citiți () (metoda clasei ifstream). Aceste funcții gândesc datele în termeni de octeți și sunt concepute pentru a transfera un număr specificat de octeți din memoria tampon de date într-un fișier și invers. Parametrii acestor funcții sunt adresa tamponului și lungimea acestuia în octeți.

    Funcția write () este concepută pentru a scrie într-un fișier numărul de octeți specificat în al doilea parametru din cel specificat în primul parametru adrese tampon de date, iar funcția de citire () este pentru citirea datelor dintr-un fișier. Trebuie remarcat aici că aceste funcții operează numai pe un buffer de date de tip char. În acest sens, în acest program am folosit operatorul reinterpret_cast<> care convertește tamponul nostru de date de tip int (mas) într-un tampon de tip char.

    Trebuie reținut că tipul de turnare cu ajutorul operatorului reinterpret_cast este necesar doar în cazurile în care primul parametru al funcțiilor scrie () și citit () nu este o matrice de caractere (la urma urmei, un caracter de tip char durează doar 1 octet).În plus, dacă este necesar să scrieți sau să citiți nu o matrice, ci variabile separate, atunci trebuie să utilizați un mecanism de referință (referință la adresa tamponului de date), de exemplu:

    ofstream fout (nume fișier, ios :: aplicație | ios :: binar);

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

    Acum este necesar să discutăm al doilea parametru al funcțiilor luate în considerare. În acest program, ca al doilea parametru, am folosit expresia N * sizeof (int), cu care am calculat numărul de octeți. De exemplu, dacă avem 5 elemente de matrice întregi, atunci numărul de octeți va fi 20. Funcția sizeof () returnează numărul de octeți alocați pentru tipul de date specificat ca parametru. De exemplu, dimensiunea ( int) va reveni 4.

    Deci, programul prezentat în acest exemplu vă permite să scrieți date într-o formă binară în fișierul bin.dat și să le citiți din acest fișier binar. Mai mult, după citire, aceste date sunt convertite în tipul int, capătă structura unui tablou și orice operație poate fi efectuată cu aceasta.

    Acum, imaginați-vă că trebuie să scrieți un program care vă permite să citiți date din fișierul bin.dat și știm doar că acest fișier conține elemente ale unui tablou întreg în formă binară. Numărul de elemente înregistrate ( N ) nu știm... Când creăm un program, nu avem dreptul să folosim o matrice constantă, adică. alocați-i memorie în etapa creării programului. Acest lucru va duce la un rezultat eronat. Deoarece o valoare prea mică a lui N va duce la faptul că nu toate elementele matricei sunt numărate, iar o valoare prea mare a lui N va duce la umplerea celulelor suplimentare cu valori aleatorii.

    Să luăm în considerare un exemplu de program care vă permite să citiți elemente ale unui tablou întreg dintr-un fișier binar prin alocarea dinamică a memoriei și, pentru a demonstra realismul datelor citite, calculați suma acestora.

    #include

    #include

    #include

    folosind namespace std;

    int N, i, sum = 0, dfb; // dfb - lungimea fișierului în octeți

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

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

    fin.seekg (0, ios :: end);// setează poziția de citire la sfârșitul fișierului (de la sfârșitul a 0 octeți)

    dfb = fin.tellg ();// obțineți valoarea poziției de la sfârșitul fișierului (în octeți)

    N = dfb / 4;// știind că un număr întreg are 4 octeți, calculează numărul de numere

    int * arr = new int [N];// creează o matrice dinamică

    fin.seekg (0, ios :: beg);// înainte de a citi datele, mutăm poziția curentă la începutul fișierului

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

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

    pentru (i = 0; i

    pentru (i = 0; i

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

    getch (); returnează 0;

    Să luăm în considerare acest program în detaliu, în care am folosit activ funcțiile seekg () și tellg (), care sunt metode ale clasei ifstream. Trebuie remarcat aici că cu orice fișier atunci când este deschis, așa-numita poziție curentă de citire sau scriere este asociată... Când un fișier este deschis pentru citire, această poziție este setată implicit la începutul fișierului. Dar destul de des este necesar să controlați manual poziția pentru a putea citi și scrie, pornind de la o locație arbitrară din fișier. Funcțiile seekg () și tellg () vă permit să setați și să verificați indicatorul de citire curent, iar funcțiile seekp () și tellp () fac același lucru pentru pointerul de scriere.

    Metoda seekg (1_opțiune, 2_parametru) mută poziția curentă de citire din fișier cu numărul de octeți specificat în 1_opțiune în raport cu locația specificată în 2_opțiune. 2_parameter poate lua una dintre cele trei valori:

    ios :: beg - de la începutul fișierului;

    ios :: cur - din pozitia curenta;

    ios :: end - de la sfârșitul fișierului.

    Aici beg, cur și end sunt constante definite în clasa ios, iar simbolurile :: indică o operație de acces la această clasă. De exemplu, operatorul fin.seekg (-10, ios :: final); vă permite să setați poziția curentă de citire din fișier cu 10 octeți înainte de sfârșitul fișierului.

    Acum să revenim la descrierea programului. Pe baza faptului că nu știm numărul de numere scrise în fișier, trebuie mai întâi să aflăm numărul de numere. Pentru a face acest lucru, folosind fin.seekg (0, ios :: end); trecem la sfârșitul fișierului și folosim funcția tellg () pentru a returna lungimea fișierului în octeți variabilei dfb. Funcția tellg () returnează poziția curentă a indicatorului în octeți. Deoarece știm lungimea unui număr întreg în octeți (4 octeți), este ușor să calculăm numărul de numere scrise în fișier, cunoscând lungimea fișierului în octeți ( N = dfb / 4;). După ce am aflat numărul de numere, creăm o matrice dinamică și trecem la începutul fișierului pentru a începe să citim datele folosind funcția de citire (). După ce numărul specificat de octeți de date (dfb) este transferat în bufferul de date (arr), datele citite în acest fel capătă structura unui tablou și devin pe deplin potrivite pentru orice fel de operații și transformări.

    Fișiere. În același timp, din punct de vedere al implementării tehnice la nivel hardware, fișierele text reprezintă un caz special de fișiere binare și, astfel, în sensul larg al cuvântului, orice fișier este potrivit pentru definirea „binarului”. fişier".

    Fișierele binare sunt adesea denumite fișiere executabile și date comprimate, dar este incorect să limitați acest concept astfel.

    Vizualizarea

    Pentru o reprezentare vizuală a unui fișier binar, acesta este împărțit în bucăți de dimensiuni egale, reprezentate ca numere, de obicei scrise în hexazecimal, uneori în octal, binar sau zecimal. Dimensiunea specificată a fragmentului poate fi de un octet, sau doi sau patru (în cazul împărțirii în bucăți de mai mulți octeți, se aplică ordonarea octetilor a platformei utilizate). Dependența intervalului de numere reprezentate de dimensiunea piesei este prezentată în tabel:

    octeți număr de biți hexazecimal octal zecimal
    nesemnat
    zecimal
    simbolic
    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

    Adesea, pe lângă valorile numerice ale octeților, sunt afișate și caracterele paginii de coduri, de exemplu, caractere ASCII tipărite în partea dreaptă) de la începutul fișierului PNG al siglei Wikipedia:

    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 20 17 17 17 28 8 8 8 8 1 2 2 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 888 *** ... .............. |

    Instrumente

    Pentru vizualizare

    • depanare (pe Microsoft Windows, parțial)
    • hexdump (pe GNU / Linux etc.)

    Pentru editare

    Literatură

    • Webster's New World Dictionary of Computer Terms, al 4-lea. Ed, Prentice Hall, NY, 1992. ISBN 0-671-84651-5
    • Leontyev B.K. Formate de fișiere Microsoft Windows XP: Manual, Moscova: ZAO „New Publishing House”, 2005. ISBN 5-9643-0059-6

    Fundația Wikimedia. 2010.

    Vedeți ce este un „fișier binar” în alte dicționare:

      Substantiv., M., Uptr. cf. adesea Morfologie: (nu) ce? număr fișier? dosar, (vezi) ce? fisier decat? dosar, ce zici? despre dosar; pl. ce? fișiere, (nu) ce? fisiere decat? fișiere, (vezi) ce? fisiere decat? fisiere, ce zici? despre fișiere 1. O matrice se numește fișier ...... Dicționarul explicativ al lui Dmitriev

      Fișier binar (binar) în sens larg: o secvență de octeți arbitrari. Numele se datorează faptului că octeții sunt compuși din biți, adică cifre binare (binare engleze). În sensul restrâns al cuvântului, fișierele binare sunt opuse fișierelor text. ... ... Wikipedia

      Fișier binar (binar) în sens larg: o secvență de octeți arbitrari. Numele se datorează faptului că octeții sunt compuși din biți, adică cifre binare (binare engleze). În sensul restrâns al cuvântului, binarele sunt opuse ... ... Wikipedia

      fișier de configurare- Un fișier binar sau text care conține informații care determină comportamentul unei aplicații, computer sau dispozitiv de rețea. Subiecte de rețea de calcul EN fișier de configurare... Ghidul tehnic al traducătorului

      Acest termen are alte semnificații, a se vedea IPA (dezambiguizare). .IPA este formatul de fișier de arhivă al aplicației Apple pentru iPhone, iPod Touch și iPad. Fișierele cu această extensie sunt stocate în App Store și descărcate folosind iTunes pentru ...... Wikipedia

      Acest articol sau secțiune necesită revizuire. În Pascal nu există module, OOP și alte tendințe noi. Descrierile extensiilor ar trebui să fie prezente numai în articolele despre... Wikipedia corespunzătoare

      Pascal Semantică: procedurală Tip de execuție: compilator Introdus în: 1970 Autor(i): Niklaus Wirth Pascal este un limbaj de programare de nivel înalt de uz general. Unul dintre cele mai cunoscute limbaje de programare, pe scară largă ... ... Wikipedia

      Nume Gopher: Port Gopher / ID: 70 / Specificație TCP: RFC 1436 Implementări de bază (clienți): Mozilla Firefox, Microsoft Windows: IE 5.x, IE 6 (MS limitat) ... Wikipedia

      Nume: Gopher Port / ID: 70 / TCP Specificații: RFC 1436 Implementări de bază (clienți): Mozilla Firefox, Microsoft Windows: Internet Explorer 5.x, Internet Explorer 6 (MS limitat) Protocol de rețea Gopher pentru căutare și transmisie distribuită... ... 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 Notă: Deoarece extensia numelui fișierului poate fi orice, lista nu este completă... Wikipedia

    Top articole similare