Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Binarët. skedar binar

Shembujt që kemi shqyrtuar deri më tani kanë demonstruar hyrje/dalje të formatuar të informacionit në skedarë. Hyrja/dalja e skedarëve të formatuar të numrave duhet të përdoret vetëm nëse janë të vegjël dhe të vegjël, si dhe nëse është e nevojshme të sigurohet mundësia për të parë skedarët pa mjete softuerike. Përndryshe, natyrisht, është shumë më efikase të përdoret I/O binare, e cila ruan numrat në të njëjtën mënyrë si në RAM-in e kompjuterit, dhe jo si vargje karakteresh. Më lejoni t'ju kujtoj se një vlerë e plotë (int) ose reale (float) zë 4 bajt në memorie, vlera shkruani dyfishështë 8 bajt dhe vlera e karakterit të tipit char është 1 bajt. Për shembull, numri 12345 në një skedar teksti (të formatuar) merr 5 bajt, dhe në një skedar binar merr 4 bajt.

Binarët, d.m.th. skedarët në të cilët informacioni ruhet në një formë të brendshme përfaqësimi përdoren për përdorim të mëvonshëm nga mjetet softuerike; ato nuk mund të shihen nga mjete jo softuerike. Avantazhi i skedarëve binare është se, së pari, gjatë leximit / shkrimit, nuk humbet kohë duke konvertuar të dhënat nga një formë e paraqitjes simbolike në një të brendshme dhe anasjelltas, dhe së dyti, nuk ka humbje të saktësisë së numrave realë. Si në rastin e hyrje/daljes së formatuar ashtu edhe në rastin e hyrje/daljes binare, për përpunimin "korrekt" të informacionit nga një skedar, është e nevojshme të dihet se çfarë lloje të dhënash, si dhe në çfarë sekuence shkruhen. skedar binar, veçanërisht pasi shikoni një skedar binar me redaktori i tekstit nuk do të japë asgjë.

Le të shqyrtojmë një shembull që demonstron shkrimin e elementeve me numër të plotë të një grupi dinamik në një skedar binar dhe leximin e tyre nga ky skedar.

#përfshi

#përfshi

#përfshi

duke përdorur hapësirën e emrave std;

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

int *mas = i ri int[N];

për (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::binary);//krijoj. jashtë. rrymë binare

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

fout.shkruaj(riinterpret_cast (mas), N*madhësia e (int));//shkruaj një grup në skedar

fout.close();//mbyllja e rrymës

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

për (i=0; i

ifstream fin("c:\\os\\bin.dat", ios::binary); //krijoni një transmetim për të lexuar skedarin

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

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

fin.lexo(riinterpret_cast (mas), N*madhësia e (int));//lexo grupin nga skedari

për (i=0; i

getch(); kthimi 0;

Vëmendje e veçantë në këtë program duhet t'i kushtohet përdorimit të funksioneve write() (metoda ofstream class) dhe read() (metoda e klasës ifstream). Këto funksione mendojnë për të dhënat në terma bajte dhe janë krijuar për të transferuar një numër të caktuar bajtësh nga buferi i të dhënave në skedar dhe mbrapa. Parametrat e këtyre funksioneve janë adresa e buferit dhe gjatësia e tij në bajt.

Funksioni write() është krijuar për të shkruar në skedar numrin e bajteve të specifikuara në parametrin e dytë nga numri i specifikuar në parametrin e parë. adresat buffer i të dhënave dhe funksioni read() është projektuar për të lexuar të dhëna nga një skedar. Duhet të theksohet këtu se këto funksione funksionojnë vetëm me një buffer të të dhënave të tipit char. Në këtë drejtim, në këtë program kemi përdorur operatorin reinterpret_cast<> , i cili konverton buferin tonë të të dhënave të tipit int (mas) në një buffer të tipit char.

Duhet mbajtur mend se lloji i hedhjes duke përdorur operatorin reinterpret_cast e nevojshme vetëm në rastet kur parametri i parë i funksioneve shkruaj() Dhe lexo () nuk është një grup karakteresh (sepse një karakter i tipit karakter zë vetëm 1 bajt). Për më tepër, nëse duhet të shkruani ose lexoni jo një grup, por variabla individuale, atëherë duhet të përdorni mekanizmin e referencës (referenca në adresën e tamponit të të dhënave), për shembull:

ofstream fout(emri i skedarit, ios::app | ios::binary);

fout.shkruaj(riinterpret_cast (& cb), madhësia (float));

Tani është e nevojshme të diskutohet parametri i dytë i funksioneve të konsideruara. Në këtë program si parametër të dytë kemi përdorur shprehjen N * sizeof (int), me të cilën kemi llogaritur numrin e bajteve. Për shembull, nëse kemi 5 elementë të grupit me numra të plotë, atëherë numri i bajteve do të jetë 20. Funksioni sizeof() kthen numrin e bajteve të alokuara për llojin e të dhënave të specifikuar si parametër. Për shembull, madhësia e ( ndër) do të kthehet 4.

Pra, programi i dhënë në këtë shembull ju lejon të shkruani të dhëna në formë binare në skedarin bin.dat dhe t'i lexoni ato nga ky skedar binar. Për më tepër, pas leximit, këto të dhëna konvertohen në llojin int, fitojnë strukturën e një grupi dhe çdo operacion mund të kryhet me to.

Tani, imagjinoni që ju duhet të shkruani një program që ju lejon të lexoni të dhëna nga skedari bin.dat, dhe ne e dimë vetëm se ky skedar përmban elemente të një grupi të plotë në formë binare. Numri i elementeve të regjistruar ( N ) ne nuk e dimë. Kur krijojmë një program, ne nuk kemi të drejtë të përdorim një grup konstant, d.m.th. caktoni memorie për të në fazën e krijimit të programit. Kjo do të japë një rezultat të gabuar. Meqenëse një vlerë shumë e vogël e N do të çojë në faktin që jo të gjithë elementët e grupit merren parasysh, dhe një vlerë shumë e madhe e N do të çojë në mbushjen e qelizave shtesë me vlera të rastësishme.

Konsideroni një shembull të një programi që ju lejon të lexoni elementë të një grupi të plotë nga një skedar binar duke shpërndarë në mënyrë dinamike memorie, dhe për të vërtetuar realizmin e të dhënave të lexuara, llogaritni shumën e tyre.

#përfshi

#përfshi

#përfshi

duke përdorur hapësirën e emrave std;

int N, i, shuma=0, dfb; //dfb - gjatësia e skedarit në bajt

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

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

fin.seek(0, ios::fund);//vendos pozicionin e leximit në fund të skedarit (nga fundi i 0 bajt)

dfb = fin.tellg();//merr fundin e vlerës së pozicionit të skedarit (në bajt)

N=dfb/4;//duke ditur që një numër i plotë merr 4 bajt, ne llogarisim numrin e numrave

int *arr = i ri int[N];// krijoni një grup dinamik

fin.seekg(0, ios::beg);//para se të lexoni të dhënat, zhvendoseni pozicionin aktual në fillim të skedarit

fin.lexo(riinterpret_cast (arr), dfb);

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

për (i=0; i

për (i=0; i

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

getch(); kthimi 0;

Le t'i hedhim një vështrim më të afërt këtij programi, në të cilin kemi përdorur në mënyrë aktive funksionet seekg() dhe tellg(), të cilat janë metoda të klasës ifstream. Këtu duhet theksuar se çdo skedar shoqërohet me të ashtuquajturin pozicion aktual të leximit ose shkrimit kur hapet. Kur një skedar hapet për lexim, ky pozicion vendoset në fillim të skedarit. Por mjaft shpesh është e nevojshme të kontrolloni pozicionin me dorë në mënyrë që të jeni në gjendje të lexoni dhe shkruani duke filluar nga një vendndodhje arbitrare në skedar. Funksionet seekg() dhe tellg() ju lejojnë të vendosni dhe kontrolloni treguesin aktual të leximit, ndërsa funksionet seekp() dhe tellp() bëjnë të njëjtën gjë për treguesin e shkrimit.

Metoda seekg(1_parameter, 2_parameter) zhvendos pozicionin aktual të leximit nga skedari me numrin e bajteve të specifikuara në 1_parameter në lidhje me vendndodhjen e specifikuar në 2_parameter. 2_parametri mund të marrë një nga tre vlerat:

ios::beg - nga fillimi i skedarit;

ios::cur - nga pozicioni aktual;

ios::end - nga fundi i skedarit.

Këtu beg, cur dhe end janë konstante të përcaktuara në klasën ios dhe simbolet:: tregojnë një operacion aksesi në këtë klasë. Për shembull, operatori fin.seekg(-10, ios::fund); ju lejon të vendosni pozicionin aktual të leximit nga skedari 10 bajt para përfundimit të skedarit.

Tani kthehemi te përshkrimi i programit. Bazuar në faktin se nuk e dimë numrin e numrave të shkruar në skedar, fillimisht duhet të zbulojmë numrin e numrave. Për këtë, duke përdorur fin.seek(0, ios::fund); kalojmë në fund të skedarit dhe përdorim funksionin tellg() për të kthyer gjatësinë e skedarit në bajt në variablin dfb. Funksioni tellg() kthen pozicionin aktual të treguesit në bajt. Meqenëse gjatësia e një numri të plotë në bajt është e njohur për ne (4 byte), nuk është e vështirë të llogaritet numri i numrave të shkruar në skedar, duke ditur gjatësinë e skedarit në bajt ( N=dfb/4;). Pasi kemi mësuar numrin e numrave, ne krijojmë një grup dinamik dhe kalojmë në fillim të skedarit në mënyrë që të fillojmë leximin e të dhënave duke përdorur funksionin e leximit (). Pasi numri i bajtëve të të dhënave të specifikuara nga ne (dfb) të transferohet në buferin e të dhënave (arr), të dhënat e lexuara në këtë mënyrë fitojnë strukturën e një grupi dhe bëhen plotësisht të përshtatshme për çdo operacion dhe transformim.

Në shembullin e mësipërm, opsioni "b" është "më i gjati": kërkon 23 bajt (21 bajt për një varg dhe 2 bajt për një numër të plotë). Opsionet "n" dhe "m" kërkojnë përkatësisht 4 dhe 5 bajt (shih tabelën).

emri, artikulli botues Pjesa variant

Binarët

Skedarët binare ruajnë informacionin në formën në të cilën paraqitet në memorien e kompjuterit, dhe për këtë arsye janë të papërshtatshëm për njerëzit. Duke parë një skedar të tillë, është e pamundur të kuptosh se çfarë shkruhet në të; nuk mund të krijohet ose korrigjohet manualisht - në ndonjë redaktues teksti - e kështu me radhë. Sidoqoftë, të gjitha këto shqetësime kompensohen nga shpejtësia e punës me të dhënat.

Për më tepër, skedarët e tekstit janë struktura aksesi sekuenciale, ndërsa skedarët binare janë të drejtpërdrejtë. Kjo do të thotë që në çdo kohë mund t'i referoheni kujtdo, jo vetëm elementit aktual të .

Skedarët e shtypur

Variablat e llojeve të të dhënave të strukturuara (përveç vargut) nuk mund të lexohen nga një skedar teksti. Për shembull, nëse ju duhet të futni të dhëna nga një skedar teksti për të mbushur lodrën e regjistrimit me informacione rreth lodrave të disponueshme për shitje (emri i produktit, çmimi i produktit dhe diapazoni i moshës për të cilin është menduar lodra):

mosha: grup 0..18; (përcaktuar në dosje nga kufijtë)

atëherë duhet të shkruani kodin e mëposhtëm:

c: char; i,j,min,max: numër i plotë;

a: grup lodrash;

fillo caktimin(f,input); rivendos (f);

për i:=1 deri në 100 bëj nëse jo eof(f)

pastaj me një [i] bëj

fillo leximinln(f,emri,çmimi,min,maks); mosha:=;

për j:= min deri në maksimum do mosha:=mosha+[j];

Siç mund ta shihni, një lexim i tillë element pas elementi është shumë i papërshtatshëm dhe kërkon shumë kohë.

Ofrohet një rrugëdalje nga kjo situatë skedarë të shtypur- elementet e tyre mund të jenë të çdo lloji të të dhënave bazë ose të strukturuar. Kufizimi i vetëm është se të gjithë elementët duhet të jenë të të njëjtit lloj. Ky shqetësim i dukshëm është

një kusht i domosdoshëm për organizimin e aksesit të drejtpërdrejtë në elementët e një skedari binar: si në rastin e vargjeve, nëse gjatësia e secilit komponent të strukturës dihet saktësisht, atëherë adresa e çdo komponenti mund të llogaritet duke përdorur një formulë shumë të thjeshtë:

<начало_структуры> + <номер_компонента>*<длина_компонента>

Përshkrimi i skedarëve të shtypur

Në seksionin var, variablat e skedarëve të krijuar për të punuar me të skedarë të shtypur përshkruhen si më poshtë:

var<файловая_перем>: dosje e<тип_элементов_файла>;

Asnjë variabël skedari nuk mund të vendoset në një konstante.

Qëllimi i një skedari të shtypur

Që tani e deri në fund të këtij seksioni, me "skedar" nënkuptojmë " skedar i shtypur binar(Sigurisht, nëse nuk thuhet ndryshe).

Komanda cakto (f,"<имя_файла>"); shërben për të vendosur një lidhje ndërmjet ndryshores së skedarit f dhe emrit të skedarit për të cilin do të jetë përgjegjëse kjo variabël.

Linjë "<имя_файла>" mund të përmbajë shtegun e plotë të skedarit. Nëse shtegu nuk është specifikuar, skedari konsiderohet se ndodhet në të njëjtin direktorium me modulin e ekzekutueshëm të programit.

Hapja dhe mbyllja e një skedari të shtypur

Në varësi të veprimeve që programi juaj do të kryejë me skedarin e hapur, është e mundur ta hapni atë në dy mënyra:

rivendos (f); - hapja e një skedari për të lexuar informacionin prej tij dhe njëkohësisht për të shkruar në të (nëse një skedar i tillë nuk ekziston, një përpjekje për ta hapur atë do të shkaktojë një gabim). E njëjta komandë kthen një tregues në fillim të një skedari;

rishkruaj (f); - hapja e një skedari për të shkruar informacion në të; nëse një skedar i tillë nuk ekziston, ai do të krijohet; nëse një skedar me të njëjtin emër ekziston tashmë, të gjitha informacionet e përfshira në të më parë do të zhduken.

nga afër skedarë të shtypur procedura e mbylljes (f) e zakonshme për të gjitha llojet e skedarëve.

Leximi nga një skedar i shtypur

Leximi nga një skedar i hapur për lexim bëhet duke përdorur komandën read(). Në kllapa, fillimisht tregohet emri i ndryshores së skedarit dhe më pas lista e hyrjes1):

Nga skedari mund të futen vetëm variablat e deklaratës së llojit përkatës, por edhe ky lloj i të dhënave mund të strukturohet. Le të themi, nëse kthehemi te shembulli i dhënë në fillim të f. Skedarët e shtypur", do të bëhet e qartë se përdorimi i skedar i shtypur në vend të tekstit do të zvogëlojë ndjeshëm tekstin e programit:

lloji lodër = emri i regjistrimit: varg; çmimi: real;

mosha: grup 0..18; (e vendosur nga kufijtë)

varf: skedar lodër;

a: grup lodrash; fillojnë

cakto (f, hyrje);

për i:=1 deri në 100 do

nëse jo eof(f) atëherë lexo(f,a[i]); mbyll (f);

Kërkoni në një skedar të shtypur

Funksioni tashmë i njohur eof(f:file):boolean na tregon se fundi i skedarit është arritur. Të gjitha funksionet e tjera "kërkimi për fundin" (eoln() , seekeof() dhe seekeoln() ) që janë origjinale për skedarët e tekstit nuk mund të aplikohen në skedarët e shtypur.

Por ka nënprograme të veçanta që ju lejojnë të punoni me të skedarë të shtypur si me strukturat e aksesit të drejtpërdrejtë:

1. Funksioni filepos(f:file):longint do të raportojë pozicionin aktual të treguesit në skedarin f. Nëse tregon në fundin e një skedari që përmban N elementë, atëherë ky funksion do të kthejë N. Kjo shpjegohet lehtësisht: elementet e skedarit numërohen duke filluar nga zero, kështu që elementi i fundit ka numrin N-1. Kështu, numri N i përket një elementi "jo-ekzistent" - shenjës së fundit të skedarit.

2. Funksioni fileize(f:file):longint do të llogarisë gjatësinë e filef-it.

3. Procedura seek(f:file,n:longint) do ta zhvendosë treguesin në skedarin f në fillim të numrit të regjistrimit N . Nëse rezulton se n është më e madhe se gjatësia aktuale e skedarit, atëherë treguesi do të zhvendoset përtej fundit të vërtetë të skedarit.

4. Procedura truncate(f:file) do të shkurtojë "bishtin" e skedarit f: të gjithë elementët nga skedari aktual deri në fund të skedarit do të hiqen prej tij. Në fakt, vetëm shenja "fundi i skedarit" do të rishkruhet në vendin ku tregoi treguesi, dhe vlerat fizikisht "të prera" do të mbeten në vendet e tyre origjinale - ato thjesht do të bëhen "pa pronar".

Shkrimi në një skedar të shtypur

Ju mund t'i ruani variablat në një skedar të shkruajtshëm me komandën write(). Ashtu si me leximin, variabla e skedarit renditet së pari, e ndjekur nga lista e daljes:

shkruaj(f,a,b,c); - write to filef (i hapur më parë për shkrim me komandat rewrite(f) or reset(f) ) variablat a , b , c .

dalje në skedar i shtypur lejohen vetëm variablat e përshkrimit përkatës të llojit të të dhënave. Konstantet e paemërtuara dhe të pashtypura nuk mund të konkludohen

skedar i shtypur.

Skedarët e shtypur konsiderohen si struktura të aksesit direkt dhe sekuencial. Kjo do të thotë se shkrimi është i mundur jo vetëm deri në fund të skedarit, por edhe për çdo element tjetër të tij. Vlera që shkruhet do të zëvendësojë vlerën e mëparshme në atë element (vlera e vjetër do të "mbishkruhet").

Për shembull, nëse dëshironi të zëvendësoni elementin e pestë të një skedari me vlerën e ruajtur në variablin a, do të shkruani copëzën e mëposhtme të kodit:

kërkoj(f,5); (treguesi do të vendoset në fillim të elementit të 5-të)

shkruaj(f,a); (treguesi do të vendoset në fillim të elementit të 6-të)

Një skedar binar është çdo skedar në kompjuterin tuaj. Të gjitha informacionet në një kompjuter dhe mediat e lidhura me të regjistrohen në bit (prandaj emri). Sidoqoftë, për krahasim, një skedar teksti mund të lexohet në lexues që korrespondojnë me shtesën (ato më të thjeshtat - madje edhe në Notepad), por një skedar i ekzekutueshëm nuk mundet. Dhe megjithëse në fakt skedari txt është i njëjti skedar binar, kur ata flasin për problemin e hapjes së përmbajtjes së skedarëve binare, nënkuptojnë skedarë të ekzekutueshëm, si dhe të dhëna të kompresuara.

Do t'ju duhet

  • - Programi HexEdit.

Udhëzim

  • Shkarkoni programin Hex Edit në hard diskun - një redaktues skedari që përfaqëson përmbajtjen e tyre në formë binare. Hapni programin duke klikuar dy herë në skedarin fillestar. Ky softuer ju lejon të lexoni skedarë binare në kohë reale, të modifikoni përmbajtjen, të shtoni hyrjet tuaja dhe shumë më tepër. Për të punuar plotësisht në këtë mjedis, duhet të dini pak për konceptet e përgjithshme të skedarëve binare.
  • Dritarja e programit nuk është shumë e ndryshme nga një redaktues i zakonshëm: menytë e njohura dhe një panel me butona, trupi i skedarit që redaktohet, faqeshënuesit dhe shiriti i statusit. Hapni skedarin binar përmes menysë File ose duke klikuar në ikonën përkatëse në shiritin e veglave. Skedari binar do të shfaqet para jush në formën e vargjeve me numra dhe shkronja. Mos i ngatërroni këto karaktere me të dhënat e printuara të skedarëve të tekstit. Ato gjithashtu mund të redaktohen duke fshirë karaktere, megjithatë, duke bërë këtë, ju do të fshini qelizat me të dhëna, pjesë të skedarit.
  • Bëni ndryshime në përmbajtjen e skedarit. Aplikacioni mund të tregojë pjesë të rëndësishme të skedarit për kërkim më të lehtë, dhe gjithashtu ka një shfaqje grafike fleksibël të kodit binar. Kaloni pamjen e përmbajtjes në modalitetin ASCII+IBM/OEM për të parë kodin e programit të skedarit. Nëse futni rreshta të gabuar në skedar, ai mund të mos funksionojë siç duhet, duke shkaktuar pasoja të rënda për sistemin operativ të kompjuterit personal.
  • Ruani ndryshimet tuaja. Nëse nuk keni përvojë në këtë lloj redaktimi skedari, përgatituni për faktin që skedari nuk do të hapet dhe refuzoni të funksionojë pasi të keni bërë ndryshime. Me shumë mundësi do të ngatërroni disa kopje përpara se ta bëni siç duhet. Mundohuni të mos ruani të gjitha ndryshimet në skedarin origjinal në mënyrë që përmbajtja e tij të mbetet e pandryshuar.
  • Ju ndoshta keni hasur në termat "tekst" dhe "binar" gjatë leximit të disa artikujve rreth . Dhe ata vendosën që e gjithë kjo është shumë e vështirë për ju, nuk mund ta kuptoni përgjithmonë, kështu që ata nuk u zhytën në të, duke tundur dorën në të.

    Ne do të përpiqemi të shpjegojmë gjithçka në gjuhën më të thjeshtë të mundshme, sepse një informacion i tillë është i dobishëm për çdo përdorues, madje edhe për ata më të papërvojë, sepse ato lidhen drejtpërdrejt me bazat e sigurisë kompjuterike.

    Pak teori

    Skedari i tekstit përmban karaktere ASCII (shkurtesa qëndron për Kodin Standard Amerikan për Shkëmbimin e Informacionit, diçka si "Kodi Amerikan për Shkëmbimin e Informacionit").

    Në fakt, ASCII është një tabelë në të cilën çdo shkronjë, numër, shenjë pikësimi dhe "qentë" të ndryshëm me "flokë dëbore" (në kuptimin @ dhe *) ndahen nga një bajt. Domethënë, tetë zero dhe një (bit) secila. Plus, natyrisht, kontrolloni karakteret si linjë e re.

    Një hapës skedari ASCII konverton bajt në shkronja, numra dhe karaktere të tjera të printueshme në ekran. Sigurisht, softueri duhet të kuptojë atë pjesë të tabelës që korrespondon me gjuhën ruse, por kjo tashmë është një çështje e kodimit.

    Në një skedar binar, zerat dhe njëshit janë renditur në sekuenca që nuk janë të nevojshme për shfaqjen e teksteve (edhe pse ka disa, për shembull, *doc). Dhe për çfarë, ju pyesni. Përgjigja është e thjeshtë: gjithçka tjetër. Programe, filma, muzikë, imazhe - çdo format ka parimet e veta strukturore për organizimin e të dhënave.

    Vetë fjala "binar" do të thotë "i përbërë nga dy përbërës", "dyfish". Në të vërtetë, vetëm dy komponentë mund të përcaktohen qartë - zero dhe një, bit, "tulla" që përbëjnë skedarin. Kuptimi i gjithçkaje tjetër mund të shfaqet vetëm gjatë nisjes (hapja, riprodhimi).

    Pjesa e poshtme e botës dixhitale

    Mund të shikoni brenda skedarit binar duke përdorur një program të veçantë - një redaktues HEX. (Nga fjala Hexadecimal, që do të thotë sistem numrash heksadecimal.) Softueri i tillë tregon bajt në formën e emërtimeve të tyre HEX, të cilat në të vërtetë janë të renditur edhe në formën e një tabele (matrice).

    Për shembull, bajtët e një imazhi JPEG, një fotografie normale ose një fotografie, do të shfaqen si FF D8 FF 00 04 3A 29 në dritaren e redaktuesit, e kështu me radhë.

    Specialisti do të kuptojë se sekuenca e bajtit FF D8 në fillim tregon se kemi JPEG para nesh. Dhe për jo-specialistët, nuk është aq interesante.

    Ju gjithashtu mund të hapni një skedar teksti në një redaktues HEX për të parë se cilët bajt korrespondojnë me shkronja specifike (karakteret ASCII). Por vetëm për kuriozitet, ende nuk ka kuptim.

    Por skedarët binare, ndodh që shihen në formë heksadecimal me qëllime mjaft domethënëse dhe specifike. Për shembull, specialistë nga laboratorët antivirus kërkojnë kodin me qëllim të keq të bashkangjitur kodit kryesor në këtë mënyrë. Meqë ra fjala, le të kalojmë te çështjet e sigurisë.

    Çfarë mund të dëmtojë

    Një skedar teksti nuk mund të përmbajë asgjë tjetër përveç karaktereve ASCII. Sidoqoftë, programet nuk janë vetëm binare, por gjithashtu përbëhen nga simbolet e mësipërme. E kam fjalën për skenarët, sigurisht.

    Me fjalë të tjera, skedari *txt nuk është i infektuar në parim dhe nuk përbën kërcënim. Dhe nëse ka një skript brenda skedarit të tekstit, atëherë mund të bëjë shumë telashe.

    Për shembull, skedari *bat përmban kodin e komandave të ndryshme dhe niset duke klikuar dy herë si një program i rregullt. Këto komanda janë shkruar me karaktere ASCII, por sistemi operativ mund t'i interpretojë ato - t'i kthejë ato në zero dhe ato që janë tipike për programet.

    Por sigurisht që nuk klikoni në skedarë të panjohur bat, apo jo? Kjo eshte e mire.

    Publikimet e mëparshme:

    Redaktimi i fundit: 06-11-2012 14:45:16

    Etiketat e materialit: ,

    regjistrime ), atëherë është mjaft e kuptueshme të dëshironi të zvogëloni disi sasinë e memories të papërdorur, por të zënë.

    Për raste të tilla, ka hyrjet me një pjesë variant.

    Regjistro përshkrimin me pjesë variant

    Në seksionin var shënim me një pjesë variant përshkruaje kështu:

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

    Pjesë jo variante hyrjet (përpara rastit të fjalës kyçe ) ndjekin të njëjtat rregulla si një hyrje e rregullt. Në përgjithësi, pjesa jovariante mund të mungojë plotësisht.

    Pjesa variant fillon me fjalën e rezervuar të rastit , pas së cilës tregohet fusha e regjistrimit, e cila më vonë do të shërbejë si ndërprerës. Ashtu si me një deklaratë normale të rastit, ndërprerësi duhet t'i përkasë njërit prej llojet e numëruara të dhëna (shih leksionin 3). Lista e zgjedhjeve mund të jetë një konstante, një interval ose bashkim i disa konstantave ose vargjeve. Seti i fushave që duhet të përfshihen në strukturën e regjistrimit nëse opsioni përkatës është ekzekutuar është i mbyllur në kllapa.

    Shembull. Për të përshkruar përmbajtjen e bibliotekës, kërkohet informacioni i mëposhtëm:

    Kolonat "Titulli" dhe "Botuesi" janë të zakonshme për të tre opsionet, dhe fushat e mbetura varen nga lloji i publikimit. Për të zbatuar këtë strukturë, ne përdorim shënim me një pjesë variant:

    tipi biblio = emri i regjistrimit, botuesi: varg; zëri i rastit: shkronja e "b": (autor: varg; viti: 0..2004); "n": (të dhënat: data); "m": (viti: 1700..2004; muaji: 1..12; numri: numër i plotë); fundi;

    Në varësi të vlerës së fushës së artikullit, regjistrimi do të përmbajë ose 4, ose 5, ose 6 fusha.

    Mekanizmi i përdorimit të një rekordi me një pjesë variant

    Numri i bajteve të alokuara nga përpiluesi për shënim me një pjesë variant, përcaktohet nga varianti më i gjatë i tij. Kompletet e fushave "më të shkurtra" nga opsionet e tjera zënë vetëm një pjesë të memories së alokuar.

    Në shembullin e mësipërm, opsioni "b" është "më i gjati": kërkon 23 bajt (21 bajt për një varg dhe 2 bajt për një numër të plotë). Opsionet "n" dhe "m" kërkojnë përkatësisht 4 dhe 5 bajt (shih tabelën).

    emri, botuesi artikull Pjesa variant
    ... "b" autor vit
    ... "n" të dhëna
    ... "m" vit muaj numri
    ... "b" autor vit

    Binarët

    Skedarët binare ruajnë informacionin në formën në të cilën paraqitet në memorien e kompjuterit, dhe për këtë arsye janë të papërshtatshëm për njerëzit. Duke parë një skedar të tillë, është e pamundur të kuptosh se çfarë shkruhet në të; nuk mund të krijohet ose korrigjohet manualisht - në ndonjë redaktues teksti - e kështu me radhë. Sidoqoftë, të gjitha këto shqetësime kompensohen nga shpejtësia e punës me të dhënat.

    Gjithashtu, skedarët e tekstit janë struktura akses sekuencial, dhe binare - direkte. Kjo do të thotë që në çdo kohë mund t'i referoheni kujtdo, jo vetëm elementit aktual.

    Artikujt kryesorë të lidhur