Mi is valójában a bájtfolyam?

Meg tudná magyarázni valaki, hogy valójában mit tartalmaz a bájtfolyam? Csak bájtokat (hexadecimális adatokat), bináris adatokat vagy angol betűket tartalmaz? Zavart vagyok a “nyers adatok” kifejezéssel kapcsolatban is. Ha valaki azt kérte tőlem, hogy “fordítsam vissza a 4 bájtos adatokat”, akkor mit kell feltételeznem, hogy az adatok hexadecimális vagy bináris kód? A két centem nem felel meg a válasznak (és vannak már jók is alább), de csak linkeket szeretnék adni ehhez a 2 cikkhez, amelyek valószínűleg jó betekintést nyújtanak a ” nyers adatok ” úgy van értelmezve, hogy valójában valamit jelent (ez nem ‘ nem jelent semmit, hacsak nem tudja, mit kell képviselnie és hogyan kódolják / tárolva) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html

  • szerintem a java azért hozta létre a bájtot, hogy elkerülje a c / c ++ ‘ s char használatát olyan dolgokhoz, amelyek képesek ‘ t nem kell karakterként értelmezni. A char-t sokat használták a c / c ++ – ban, mert a char mérete 1 bájt. Az unixben lévő eszközök is blokk- és karaktereszközök. Ha char eszközökről olvas, előjel nélküli karaktereket / bájtokat kap.
  • A bájtfolyam kétértelmű. Az oktettfolyam nem az.
  • Az adatok sok szinten értelmezhetők. Alul ‘ csak be- és kikapcsoló elektromos szintek sora. Valamivel feljebb ‘ egy darab bájt, vagy ahogy mondod, egy bájtos adatfolyam . Még fentebb kezdi értelmezni a nyers adatokat. A bájtok sokféleképpen értelmezhetők szövegként (kódolások). Egész számok is (nagy vagy kis endián). Akár magasabbra is felmehet. Van egy zip fájlja. Ez a ZIP fájl a tegnapi biztonsági másolata. Stb. A probléma az, hogy a pontos szint gyakran implicit és nem egyértelmű, és ez zavaró lehet.
  • Válasz

    A bájtfolyamok bájtokat tartalmaznak. Bontva arra, ami valójában, 8 bit 1-es és 0-ból áll. Ha egy számot képviselne, akkor ez 0 és 255 közötti szám lehet (ami, hozzá tehetem, nem véletlen, hogy az IP-címben szereplő 4 szám mindig 0 és 255 között mozog). A bájt adatfolyamok általában kifinomult interfészek, amelyek az alapbájt tömb elrejtésére szolgálnak, amelyet egy kör alakú puffer tárolására használnak (kitölti a puffert, és várja, hogy valaki kiürítse, ekkor egyszerűen kitölti a puffert újra).

    Mi a fenét jelent ez? Nos, ez képviselhet szöveges fájlt, képet vagy élő videofolyamot. Az, hogy mi a , teljes mértékben attól függ, hogy ki olvassa. A hexa ábrázolás egy másik módja ugyanannak a mondanivalónak, bár néha kényelmesebb a bájtokat kezelni a hexa ábrázolásuk helyett a számok szerint, ugyanakkor ugyanaz.

    Amikor a nyers adatokra hivatkozik, akkor általában a bájt adatokra hivatkozik. Az adatok címke nélkül érkeznek: „Képfájl vagyok!” Általában csak akkor kezeljük a nyers adatokat, ha nem Nem igazán érdekel, hogy az adatok általánosságban mit képviselnek. Például, ha egy képet fekete-fehér verzióvá szeretnék konvertálni, akkor azt mondhatnám, hogy elolvasom a kép nyers adatait és minden 3 olvasott bájt után (ami valójában a piros szín, a zöld szín ábrázolása és ábrázolja a kék színt), adja hozzá a számértékét, és ossza el 3-mal, majd írja be ezt az értéket háromszor. Lényegében azt csinálom, hogy átlagosan egy pixel vörös, zöld és kék értékét átlagolom, és ezzel egyenértékű szürke pixelt készítek Amikor azonban arról beszélünk, hogy műveleteket hajtunk végre adatokra a “byte byte” szinten, akkor nem igazán érdekli az úgynevezett összkép.

    Vagy esetleg el akar menteni egy fájlt egy adatbázisba, de kéri, hogy a “nyers adatait” helyezze be egy blob adattípusba. Ez egyszerűen azt jelenti, hogy egy fájl adatait nagy bájtos tömbgé alakítja át, amelyet az adatbázis érthet és kezelhet. Meg fogja találni, hogy amikor lekérjük ezt az értéket az adatbázisból, akkor egyszerűen egy nagy bájtos tömb lesz, amint azt kezdetben az adatbázisnak adta meg. Ha ez az adat fájl volt, akkor Önnek, a programozónak újra kell értelmeznie ezt a bájtot az adatok mintha egy bájtot olvasnának egy fájlból.

    Ha valaki azt kérné, hogy “fordítsa meg a 4 bájtos adatot”, akkor feltételezem, hogy a számok big endian vs little endian értelmezésére utal. , amely a legtöbb vagy legkevésbé jelentős bájttal kezdődő számokat ír. Nem számít, hogy egy számot big-endian vagy little-endianként ábrázolnak-e, csak az, hogy az összes számot olvasó rendszer következetesen értelmezi.

    Ez nem azt jelenti, hogy a tényleges számábrázolás (vagy az adott kérdés hexadeprezentációja) megváltozik, egyszerűen meg kell fordítani azt a sorrendet, amelyben ez a 4 bájt számot állít elő. Tehát mondjuk, hogy 0x01, 0x02, 0x03 és 0x04 van.Ezek megfordításához “0x04, 0x03, 0x02, 0x01” kell lennie. A rendszer feltehetően fordított sorrendben olvassa el ezt a 4 bájtot, és mivel már megfordította, az értéket nagyon ugyanaznak értelmezzük, mint ami szánták a nyers adatokban.

    Remélem, hogy ez megmagyarázza!

    Megjegyzések

    • Minden rendben van ..! Bemutathatja a ” nyers adatok ” válaszát?
    • @ user2720323 Rendben, a jobb magyarázat érdekében módosítva ” nyers adatok. ” 🙂
    • Egy dolgot szem előtt kell tartani … minden adat egyszerűen csak gyűjtemény bájt. Ezeknek a bájtoknak a jelentését valamilyen metaadat határozza meg (fájlkiterjesztés, adatbázis mező stb.). A képfájl értelmezhető ASCII fájlként és fordítva. Lehet, hogy a szöveg vagy kép értelmetlen, de mégis lehetséges. (Derp … el kellett volna olvasnom a következő válaszokat)
    • @kevincline Kérjük, próbálja értékelni azt a tényt, hogy én ‘ próbálok ötletet közvetíteni. A prioritásom nem ‘ t, hogy pontos algoritmust írjak. Ha pontosabb akar lenni, ‘ mérje le a piros zöld és kék értékeket aszerint, hogy az emberi szem mit érzékel.

    Válasz

    A bájt egyszerűen információegység – bármi lehet. Egy bájt önmagában nem jelent semmit, ehhez valamiféle jelentést kell csatolnia.

    Tehát ennek kibővítéséhez –

    Bájtokat (hexadecimális adatokat), bináris adatokat vagy csak angol betűket tartalmaz?

    A hexadecimális adatok megegyeznek a bináris adatokkal. ” s csak egy másik módja az adatok megjelenítésének. Például 0x41 = 0b01000001 = “A” = 65 (tizedes). Az angol betűk csak ennek részhalmazai lennének.

    Ha valaki azt kérte tőlem, hogy “fordítsam vissza a 4 bájtos adatokat”, akkor mit kell feltételeznem, hogy az adatok hexa- vagy bináris kód?

    Mivel a hex csak az adatok ábrázolása , nem számít, hogy gondolkodik Ha van 0x65 0x66 0x67 0x68 adata, annak megfordításához 0x68 0x67 0x66 0x65 -t kapja. Ha ezeket az adatokat a karakter, eredetileg A B C D, de most D C B A.

    Vissza egy bájtfolyamhoz – ez “csak egy adatsor. Használatához tudnia kell, hogy mit jelentenek az adatok. Ha szöveges fájlt olvasunk, akkor a fájl olvasásakor kapott bájtfolyam csak valamilyen karakter lenne. Egy futtatható fájlban egy csomó nem nyomtatható karakter lenne, ezért bináris fájlnak hívják. Nyilvánvaló, hogy végrehajtható fájl megnyitható egy szövegszerkesztőben, de nem tesz semmi hasznosat.

    Megjegyzések

    • +1 de a lat bit bináris ra történő hangsúlyozása helytelennek tűnik. A ” bináris adatok ” gyakran tartalmaznak nyomtathatatlan karaktereket, de ‘ ” bináris ” mert ‘ bináris számjegyekből áll, nem azért, mert nem nyomtatható karaktereket tartalmaz . Megértem, hogy ‘ a ” bináris ” fájlt használja a nyomtatható ” text ” adatok, de úgy gondolom, hogy ez még jobban összezavarhatja az OP-t.
    • Egy kérdésem van a megfordítással kapcsolatban. Ha van egy egész számom (32 bites) 325487 a fájlban, hogyan tudom megfordítani ezt a 4 bájtos egész számot? hasonlóan van egy szavam (” hai, hogy vagy “), hogyan lehet ezt a karakterláncot megfordítani úgy, hogy minden karaktert bájtnak gondolok. / li>
    • @ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24); Ez szó szerint vesz minden bájtot, eltolja a megfelelő helyzetbe és kombinálja a többivel.

    Válasz

    A bájtfolyam egy rendezett bájtsorozat. Van egy első bájt, amelynek nincs elődje. Utódja a második bájt stb. Manapság a bájt széles körben ismert, hogy nyolc bitből áll. Ha pontosabbak akarunk lenni, használjuk az oktettfolyam és az oktett kifejezéseket. Még mindig léteznek olyan számítógépek, amelyek bájtjai nem nyolc bit szélesek.

    A hexadecimális számok írásának módja, és bináris adatok nyomtatott ábrázolásaként szolgál. A hexadecimális valójában szöveg . Például az FE hexadecimális érték bájtot jelenthet: azok a 11111110 bitek, amelyek decimális értéke 255.Az FE azonban valójában egy karakterlánc, amely a F és a E karakterekből áll, amely megköveteli két bájt az USA-ASCII vagy ISO-646 karakterkészletben! Ez a két bájt az, ami FE , és az egyetlen bájt 254 értékkel az, amit az FE képvisel ek, nyomtatott jelölésként.

    Ha kommunikációs csatornát, fájlkezelőt vagy ilyen eszközt ír le mint bájtfolyamot, és más információt nem ad meg, szinte biztosan nem azt jelenti, hogy a bájtok hexadecimális szövegként vannak ábrázolva , így minden egyes absztrakt bájt két fizikai bájtot igényel.

    A nyers adatok pedig egyszerűen olyan biteket jelentenek, amelyek nem értelmezhetők úgy, hogy a “bitek tömbjén” túlmutató struktúrájuk lenne. A nyers adatok általában struktúrájúak és valamit képviselnek, de amikor nyers adatként tekintünk rá, akkor vagy figyelmen kívül hagyjuk a pillanatnyi értelmezést (például egy adattípus nyers ábrázolását vizsgáljuk annak helyességének ellenőrzésére) a bites szintű részletekig), vagy az értelmezés nem áll rendelkezésre (van néhány adatunk, de nem értjük az adatok felépítését és mit képviselnek).

    Megjegyzések

    • A PDP-10 utasításokat adott a változó méretű bájtok kezelésére. A leggyakoribb hét bites ASCII volt, amelyet hat bites karakter követett.

    Válasz

    A bájt 8 bitek. A bit 0 vagy 1. A “nyers adatok” csak egy bájt áramlása a másik után. A bájtfolyam fájlból, hálózati kapcsolatból, sorosított objektumból, véletlenszám-generátorból stb. Származhat.

    • A bájt megjelenítésének több módja van: bináris (01110110) hexa = hexidecimális (7C), oktális (0271) vagy tizedes (215). Minden esetben a maximális érték 255 (10. alap).

    • Néha bájtokat rendelnek a karakterekhez, például az ascii-hoz. Írja be az “ascii” parancsot egy unix parancssorba, és egy nagy táblázatot kap, amely a 0-255 vagy (0-FF hex) bájtértékeket hozzárendeli a társított karakterhez. Például a szóköz x20, az “A” x40 Ne feledje, hogy néhány bájtérték leképezi a karaktereket, és nem nyomtatható. De maguk a bájtok nem “t” karakterek – ők csak egy köteg bit. Szám.

    • A “4 bájt megfordítása” az lenne, ha néhány bájtot veszünk a 123 42 231 0-ból, és megfordítjuk a sorrendet – 0 231 42 123. Bájtgőzre alkalmazva, I “d valószínűleg 4 bájtot olvasna, fordítsa meg, olvassa el a következő 4 bájtot, stb.

    (BTW ez a probléma releváns, mert ha nagyobb számot akarsz képviselni, mint 255 bye-ként több bájtot kell használnia. De ekkor az a kérdés, hogy a “legnagyobb” bájt jön-e előbb vagy utoljára? Ezt hívják big endiannak vagy kis endiannak – keresse meg őket, hogy minél több háttérrel rendelkezzen hasznos, ha nyers bájtfolyamban kevered a bájt körül.)

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük