Ce este de fapt un flux de octeți?

Poate cineva să-mi explice ce conține de fapt fluxul de octeți? Conține octeți (date hexagonale) sau date binare sau litere în limba engleză? De asemenea, sunt confuz cu privire la termenul „date brute”. Dacă cineva mi-a cerut „inversarea datelor de 4 octeți”, atunci ce ar trebui să presupun că datele sunt cod hex sau cod binar?

Comentarii

  • Cei doi cenți ai mei nu sunt vrednici de răspuns (și sunt deja buni mai jos), dar vreau doar să ofer linkuri către aceste 2 articole, care vor oferi probabil o perspectivă bună despre modul în care ” datele brute ” este interpretat pentru a însemna de fapt ceva (nu înseamnă nimic ‘ decât dacă știți ce ar trebui să reprezinte și cum este codificat / stocat) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html
  • Cred că java a creat octet pentru a evita utilizarea c / c ++ ‘ s char pentru lucruri care pot ‘ nu poate fi înțeles ca un personaj. char a fost folosit mult în c / c ++ deoarece dimensiunea char este de 1 octet. De asemenea, dispozitivele din Unix sunt dispozitive bloc și caracter. Dacă citiți de pe dispozitive char, primiți un flux de caractere / octeți nesemnați.
  • Fluxul de octeți este ambiguu. Fluxul de octeți nu este.
  • Datele pot fi interpretate la mai multe niveluri. În partea de jos este ‘ doar o serie de niveluri electrice pornite-oprite. Un pic mai sus, ‘ reprezintă o bucată de octeți sau, după cum spui, un flux de octeți . Chiar și mai sus începeți să interpretați datele brute. Octetii pot fi interpretați ca text în mai multe moduri (codificări). Numere întregi, de asemenea, (mare sau puțin endian). Puteți chiar să urcați mai sus. Aveți un fișier zip. Fișierul zip este backupul dvs. de ieri. Și așa mai departe. Problema este că nivelul exact este adesea implicit și nu este clar, iar acest lucru poate fi confuz.

Răspuns

Fluxurile de octeți conțin, bine, octeți. Defalcat în ceea ce este de fapt, este vorba de 8 biți compuși din 1s și 0s. Dacă ar reprezenta un număr, ar fi orice număr de la 0 la 255 (ceea ce, aș putea adăuga, nu este o coincidență de ce cele 4 numere dintr-o adresă IP variază întotdeauna de la 0 la 255). fluxurile de octeți sunt de obicei interfețe sofisticate menite să ascundă matricea de octeți de bază utilizată pentru a ține un tampon circular (umpleți tamponul și așteptați ca cineva să îl golească, moment în care acesta umple pur și simplu tamponul din nou).

Ce naiba reprezintă asta? Ei bine, ar putea reprezenta un fișier text sau o imagine sau un flux video live. Ce este este depinde în totalitate de contextul cine îl citește. Reprezentarea hexagonală este un alt mod de a spune același lucru, deși este uneori mai convenabil să gestionați octeții în ceea ce privește reprezentarea lor hexagonală mai degrabă decât numerele, totuși este același lucru.

Când vă referiți la date brute, vă referiți, de obicei, la date de octeți. Datele vin fără o etichetă care să spună „Sunt un fișier imagine!” De obicei, vă ocupați de datele brute numai atunci când nu faceți acest lucru ” Nu îmi pasă ce reprezintă datele în ansamblu. De exemplu, dacă aș dori să convertesc o imagine în versiunea sa alb-negru, aș putea spune să citesc datele brute ale imaginii și pentru fiecare 3 octeți citiți (care ar fi de fapt reprezentarea culorii roșii, reprezentarea culorii verzi și reprezentarea culorii albastre), adăugați-i valoarea numărului și împărțiți-o la 3, apoi scrieți acea valoare de 3 ori. În esență, ceea ce aș face este să calculez media valorilor roșu, verde și albastru ale unui pixel și să-i faceți pixelul echivalent gri din acel Cu toate acestea, atunci când vorbiți despre efectuarea operațiunilor la date la nivelul „octet cu octet”, nu vă pasă cu adevărat de imaginea de ansamblu, ca să spunem așa.

Sau, poate, doriți să salvați un fișier într-o bază de date, dar vă solicită să introduceți „datele brute” într-un tip de date blob. Aceasta înseamnă pur și simplu să convertiți datele unui fișier într-o matrice de octeți mare pe care baza de date o poate înțelege și gestiona. Veți descoperi că atunci când extrageți acea valoare din baza de date, va fi pur și simplu o matrice de octeți mari așa cum ați furnizat inițial bazei de date pentru început. Dacă aceste date au fost un fișier, atunci dvs., programatorul, trebuie să reinterpretați acel octet date ca și cum ai citi un fișier câte un octet la un moment dat.

Dacă cineva ți-ar cere să „inversezi datele de 4 octeți”, aș presupune că se referă la interpretarea numerelor big-endian vs. , care scrie numere începând cu octetul cel mai semnificativ sau cel mai puțin semnificativ. Nu contează dacă un număr este reprezentat ca big-endian sau little-endian, doar că toate sistemele care citesc numărul îl interpretează în mod consecvent.

nu este să spunem că reprezentarea efectivă a numărului (sau reprezentarea hexagonală pentru acea materie) este modificată, pur și simplu că ordinea în care acești 4 octeți fac un număr ar trebui inversată. Deci, spuneți că aveți 0x01, 0x02, 0x03 și 0x04.Pentru a inversa aceste situații, ați avea în schimb 0x04, 0x03, 0x02, 0x01. Se presupune că sistemul ar citi aceste 4 octeți în ordinea inversă și, din moment ce l-ați inversat deja, valoarea este interpretată ca fiind aceeași cu ceea ce a fost intenționat în datele brute.

Sper că asta explică!

Comentarii

  • Totul este în regulă ..! Vă rugăm să elaborați răspunsul referitor la ” date brute „?
  • @ user2720323 Bine, modificat pentru a explica mai bine ” date brute. ” 🙂
  • Un lucru de reținut … toate datele sunt pur și simplu o colecție de octeți. Semnificația acestor octeți este definită de un fel de metadate (extensia de fișier, câmpul bazei de date etc.). Un fișier imagine poate fi interpretat ca un fișier ASCII și invers. Textul sau imaginea ar putea fi lipsite de sens, dar este încă posibil. (Derp … Ar fi trebuit să citesc următoarele răspunsuri)
  • @kevincline Vă rugăm să încercați să apreciați faptul că ‘ încerc să transmit o idee. Prioritatea mea nu este ‘ t să scriu un algoritm precis. Dacă doriți să fiți mai exacți, ‘ cântăriți valorile roșu verde și albastru în funcție de ceea ce ochiul uman poate percepe.

Răspuns

Un octet este pur și simplu o unitate de informații – poate fi orice. Un octet în sine nu înseamnă nimic, trebuie să-i atribuiți un fel de semnificație.

Deci, să vă extindeți pe asta –

Conține octeți (date hex) sau date binare sau numai litere în limba engleză?

Datele hex sunt aceleași cu datele binare. Este doar un mod diferit de a afișa datele. De exemplu, 0x41 = 0b01000001 = „A” = 65 (zecimal). Literele în limba engleză ar fi doar un subset al acestuia.

Dacă cineva mi-ar cere să „inversez datele de 4 octeți”, atunci ce ar trebui să presupun că datele sunt cod hex sau cod binar?

Deoarece hex este doar o reprezentare a datelor, nu contează cum credeți dacă aveți date despre 0x65 0x66 0x67 0x68, pentru a le inversa, veți obține 0x68 0x67 0x66 0x65. Dacă ați fi uitat la aceste date în termeni de caractere, ați avea inițial A B C D, dar acum aveți D C B A.

Înapoi la un flux de octeți – it „Este doar o secvență de date. Trebuie să știți ce reprezintă datele pentru a le utiliza. Dacă citim un fișier text, fluxul de octeți pe care îl veți obține atunci când citiți fișierul ar fi doar caractere de un fel. Un fișier executabil ar avea o grămadă de caractere neprimabile, motiv pentru care ar fi numit fișier binar . În mod clar, este posibil să deschideți un executabil într-un editor de text, dar nu face nimic util.

Comentarii

  • +1 dar accentul pus pe binar în bitul lat pare greșit. ” date binare ” conține adesea caractere neprimabile, dar ‘ se numește ” binar ” deoarece ‘ este format din cifre binare, nu pentru că conține caractere neprimabile . Înțeleg că ‘ utilizați ” binar ” în opoziție cu ” text ” date, dar cred că acest lucru poate confunda și mai mult PO.
  • Am o întrebare cu privire la inversare. Dacă am un număr întreg (32 biți) 325487 într-un fișier, cum pot inversa acest număr întreg de 4 octeți? în mod similar, am un cuvânt (” hai cum ești „), cum să inversezi acest șir asumând fiecare caracter ca un octet.
  • @ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24); Aceasta ia literalmente fiecare octet, îl deplasează în poziția corectă și se combină cu ceilalți.

Răspuns

Un flux de octeți este o secvență ordonată de octeți. Există un prim octet, care nu are un predecesor. Succesorul său este al doilea octet și așa mai departe. În prezent, un octet este înțeles pe scară largă ca fiind format din opt biți. Dacă vrem să fim mai preciși, folosim termenii octet stream și octet . Există încă computere cu octeți care nu au o lățime de opt biți.

Hexadecimal este un mod de a scrie numere și servește ca o reprezentare tipărită pentru datele binare. Hexadecimalul este de fapt text De exemplu, valoarea hexazecimală FE ar putea reprezenta un octet: biții 11111110 care au valoarea zecimală 255.Cu toate acestea, FE este de fapt un șir de caractere format din caracterele F și E, care necesită doi octeți în setul de caractere US-ASCII sau ISO-646! Acești doi octeți este ceea ce FE este și octetul unic cu valoarea 254 este ceea ce FE reprezintă , ca notație tipărită.

Dacă este descris un canal de comunicație, un mâner de fișier sau un astfel de dispozitiv deoarece transportă un flux de octeți și nu se oferă alte informații, aproape sigur nu înseamnă nu înseamnă că octeții sunt reprezentați ca text hexadecimal , astfel încât fiecare octet abstract din flux necesită doi octeți fizici.

Și datele brute înseamnă pur și simplu biți care nu sunt interpretați ca având nicio structură dincolo de „matrice de biți”. Datele brute au de obicei o structură și reprezintă ceva, dar atunci când o privim ca date brute, fie ignorăm interpretarea pentru moment (de exemplu, ne uităm la reprezentarea brută a unui tip de date pentru a-i verifica corectitudinea în jos până la detaliile nivelului de biți), sau interpretarea nu este disponibilă (avem câteva date, dar nu înțelegem structura datelor și ce reprezintă acestea).

Comentarii

  • PDP-10 avea instrucțiuni pentru a trata octeți de dimensiuni variabile. Cel mai frecvent a fost ASCII de șapte biți, urmat de caractere de șase biți.

Răspuns

Un octet este 8 biți. Un bit este 0 sau 1. „Date brute” este doar un flux de un octet după altul. Un flux de octeți poate proveni dintr-un fișier, o conexiune de rețea, un obiect serializat, un generator de numere aleatorii etc.

  • Există mai multe moduri de a afișa un octet: binar (01110110) , hex = hexidecimal (7C), octal (0271) sau zecimal (215). În toate cazurile, valoarea maximă este 255 (baza 10).

  • Uneori octeții sunt atribuiți caracterelor, cum ar fi ascii. Tastați „ascii” pe o linie de comandă unix și veți obține un tabel mare care mapează valorile de octet 0-255 sau (0-FF hex) la caracterul asociat. De exemplu, spațiul este x20 și „A” este x40 Rețineți că valorile unor octeți sunt mapate pentru a controla caracterele și nu pot fi tipărite. Dar octeții înșiși nu sunt „t caractere – ei” sunt doar un pachet de biți. Un număr.

  • „inversează 4 octeți” ar fi să ia niște octeți 123 42 231 0 și să răstoarnă ordinea – 0 231 42 123. Aplicat la un octet abur, I „Aș fi citit probabil 4 octeți, inversați-i, citiți următorii 4 octeți etc.

(BTW această problemă este relevantă, deoarece dacă doriți să reprezentați un număr mai mare decât 255 ca bye, trebuie să folosiți mai mult de un octet. Dar atunci întrebarea este dacă „cel mai mare” octet este primul sau ultimul? Asta se numește endian mare sau endian mic – căutați-i pentru mai multe informații despre este util să amestecați în jurul octeților într-un flux de octeți brut.)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *