Může mi někdo vysvětlit, co bajtový stream vlastně obsahuje? Obsahuje pouze bajty (hexadecimální data) nebo binární data nebo pouze anglická písmena? Jsem také zmatená ohledně pojmu „nezpracovaná data“. Pokud mě někdo požádal, abych „obrátil 4bajtová data“, tak co bych měl předpokládat, že data jsou hexadecimální nebo binární kód?
Komentáře
- Moje dva centy neodpovídají (a ty dobré jsou již níže), ale chci pouze poskytnout odkazy na tyto 2 články, které pravděpodobně poskytnou dobrý přehled o tom, jak “ nezpracovaná data “ je interpretován tak, že ve skutečnosti něco znamená (neznamená to ‚ nic, pokud nevíte, co to má představovat a jak je to kódováno / uloženo) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html
- Myslím, že java vytvořila bajt, aby se vyhnula použití znaku c / c ++ ‚ s pro věci, které mohou ‚ nelze chápat jako znak. char byl hodně používán v c / c ++, protože velikost char je 1 bajt. Zařízení v unixu jsou také bloková a znaková zařízení. Pokud čtete ze zařízení char, získáte proud nepodepsaných znaků / bajtů.
- Bajtový proud je nejednoznačný. Stream oktetu není.
- Data lze interpretovat na mnoha úrovních. Ve spodní části je ‚ jen řada elektrických úrovní zapnuto-vypnuto. O něco výše je ‚ kus bajtů nebo, jak říkáte, bajtový proud . Ještě výše začnete interpretovat nezpracovaná data. Bajty lze interpretovat jako text mnoha způsoby (kódování). Také celá čísla (velký nebo malý endian). Můžete dokonce jít výše. Máte soubor ZIP. Ten zip soubor je vaše záloha ze včerejška. A tak dále. Problém je v tom, že přesná úroveň je často implicitní a není jasná, což může být matoucí.
Odpověď
Bajtové streamy obsahují bajty. Rozděleno na to, co to vlastně je, je to 8 bitů složených z 1 s a 0 s. Pokud by představovalo číslo, bylo by to jakékoli číslo od 0 do 255 (což, mohu dodat, není náhoda, proč se 4 čísla na IP adrese vždy pohybují od 0 do 255). Byte streamy jsou obvykle sofistikovaná rozhraní určená ke skrytí základního základního bajtového pole používaného k uložení kruhové vyrovnávací paměti (vyplníte vyrovnávací paměť a počkáte, až ji někdo vyprázdní, kdy jednoduše vyplní vyrovnávací paměť znovu).
Co to sakra představuje? Může to představovat textový soubor nebo obrázek nebo živý videostream. To, co je , zcela závisí na kontextu toho, kdo to čte. Hex reprezentace je další způsob, jak říci totéž, i když je někdy pohodlnější spravovat bajty z hlediska jejich hexadecimální reprezentace než čísel, ale je to totéž.
Když odkazujete na nezpracovaná data, obvykle máte na mysli bajtová data. Data přicházejí bez tagu „Já jsem obrazový soubor!“ Obvykle zpracováváte pouze nezpracovaná data, když je nepoužíváte “ Opravdu se nestarám o to, co data celkově představují. Například kdybych chtěl převést obrázek na jeho černobílou verzi, mohl bych říci, že čtu nezpracovaná data obrázku a za každé 3 přečtené bajty (což by ve skutečnosti bylo znázornění červené barvy, znázornění zelené barvy a reprezentace modré barvy), přidejte jeho číselnou hodnotu a vydělte 3, pak tuto hodnotu zapište třikrát. V podstatě to, co dělám, je zprůměrování červené, zelené a modré hodnoty pixelu a jeho šedý ekvivalentní pixel z toho Když však hovoříte o provádění operací s daty na úrovni „bajt po bajtu“, nezáleží vám takřka na skutečném obrazu.
Nebo si možná přejete uložit soubor do databáze, ale požádá vás o vložení jeho „nezpracovaných dat“ do datového typu blob. To jednoduše znamená převést data souboru do velkého bajtového pole, kterému může databáze porozumět a spravovat jej. Zjistíte, že když tuto hodnotu načtete z databáze, bude to jednoduše jedno velké bajtové pole, které jste původně poskytli do databáze. Pokud tato data byla soubor, musíte vy, programátor, tento bajt reinterpretovat data, jako kdybyste četli soubor po jednom bajtu.
Pokud vás někdo požádal o „obrácení čtyřbajtových dat“, předpokládal bych, že se týká interpretace čísel big-endian vs. , který zapisuje čísla začínající nejvýznamnějším nebo nejméně významným bajtem. Nezáleží na tom, zda je číslo reprezentováno jako big-endian nebo little-endian, pouze to, že všechny systémy, které číslo čtou, ho interpretují konzistentně.
Toto nelze říci, že skutečná číselná reprezentace (nebo hexadecimální reprezentace) se změní, jednoduše to, že pořadí, ve kterém tyto 4 bajty vytvářejí číslo, by mělo být obráceno. Řekněme tedy, že máte 0x01, 0x02, 0x03 a 0x04.Chcete-li je obrátit, místo toho byste měli 0x04, 0x03, 0x02, 0x01. Systém by pravděpodobně přečetl tyto 4 bajty v opačném pořadí a protože jste to již obrátili, hodnota je interpretována jako velmi stejná jako to, co bylo zamýšleno v nezpracovaných datech.
Doufám, že to vysvětlíme!
Komentáře
- Všechno je v pořádku ..! Můžete prosím vypracovat odpověď reagující na “ nezpracovaná data „?
- @ user2720323 Dobře, upraveno tak, aby lépe vysvětlovalo “ nezpracovaná data. “ 🙂
- Je třeba mít na paměti jednu věc … všechna data jsou jednoduše souborem bajtů. Význam těchto bajtů je definován určitým druhem metadat (přípona souboru, databázové pole atd.). Soubor obrázku lze interpretovat jako soubor ASCII a naopak. Text nebo obrázek nemusí mít smysl, ale stále je to možné. (Derp … měl jsem si přečíst další odpovědi)
- @kevincline Pokuste se ocenit skutečnost, že se ‚ snažím sdělit nápad. Moje priorita není ‚ t napsat přesný algoritmus. Pokud chcete být přesnější, vážíte ‚ červené, zelené a modré hodnoty podle toho, co dokáže lidské oko vnímat.
Odpověď
Bajt je jednoduše jednotka informací – může to být cokoli. Bajt sám o sobě nic neznamená, musíte mu přiřadit nějaký význam.
Takže, abyste to rozšířili –
Obsahuje bajty (hexadecimální data) nebo binární data nebo pouze anglická písmena?
Hex data jsou stejná jako binární data. It “ je to jen jiný způsob zobrazení dat. Například 0x41 = 0b01000001 = „A“ = 65 (desítkově). Anglická písmena by byla jen jejich podmnožinou.
Pokud mě někdo požádal, abych „obrátil 4bajtová data“, pak co mám předpokládat, že data jsou hexadecimální nebo binární kód?
Jelikož hex je pouze reprezentace dat, nezáleží na tom, jak si myslíte o tom. Pokud máte data 0x65 0x66 0x67 0x68
, obrátili byste je 0x68 0x67 0x66 0x65
. Pokud byste se na tato data dívali z hlediska znaků, původně byste měli A B C D
, ale nyní máte D C B A
.
Zpět na byte stream – it „je to jen sled dat. Abyste mohli data používat, musíte vědět, co představují. Pokud čteme textový soubor, bajtový proud, který byste dostali při čtení souboru, by byly jen znaky nějakého druhu. Spustitelný soubor by měl v sobě spoustu netisknutelných znaků, a proto by se mu říkalo binární soubor. Je zřejmé, že je možné otevřít spustitelný soubor v textovém editoru, ale nedělá nic užitečného.
Komentáře
- +1 ale důraz na binární v lat bit se zdá být na místě. “ binární data “ často obsahují netisknutelné znaky, ale ‚ se nazývá “ binární “ protože je ‚ tvořen binárními číslicemi, ne proto, že obsahuje netisknutelné znaky . Chápu, že ‚ používáte “ binární “ v opozici vůči tisknutelné “ text “ data, ale myslím, že to může OP ještě více zmást.
- Mám jednu otázku týkající se obrácení. Pokud mám v souboru celé číslo (32 bitů) 325487, jak mohu obrátit toto 4bajtové celé číslo? podobně mám slovo (“ hai jak se máš „), jak tento řetězec zvrátit tím, že každý znak převezmeme jako bajt.
- @ user2720323
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
Tím se doslova bere každý bajt, posune se do správné polohy a zkombinuje se s ostatními.
Odpověď
Bajtový proud je uspořádaná posloupnost bajtů. Existuje první bajt, který nemá žádného předchůdce. Jeho nástupcem je druhý bajt atd. V dnešní době se bajtu obecně rozumí, že se skládá z osmi bitů. Pokud chceme být přesnější, použijeme výraz oktetový proud a oktet . Stále existují počítače s bajty, které nemají osm bitů.
Hexadecimální je způsob psaní čísel a slouží jako tištěná reprezentace pro binární data. Hexadecimální je ve skutečnosti text . Například hexadecimální hodnota FE
může představovat bajt: bity 11111110
, které mají desítkovou hodnotu 255
.FE
je však ve skutečnosti řetězec znaků skládající se ze znaků F
a E
, které vyžadují dva bajty ve znakové sadě US-ASCII nebo ISO-646! Tyto dva bajty jsou FE
a jednobajtový s hodnotou 254 je to, co FE
představuje , jako tištěný zápis.
Pokud je popsán komunikační kanál, popisovač souboru nebo nějaké takové zařízení protože přenáší bajtový proud a nejsou uvedeny žádné další informace, téměř jistě to ne znamená, že bajty jsou reprezentovány jako hexadecimální text , takže každý abstraktní bajt v proudu vyžaduje dva fyzické bajty.
A nezpracovaná data jednoduše znamenají bity, které nejsou interpretovány tak, aby měly jakoukoli strukturu nad rámec „pole bitů“. Nezpracovaná data mají obvykle strukturu a něco představují, ale když se na ně díváme jako na nezpracovaná data, buď momentálně ignorujeme interpretaci (například se díváme na surovou reprezentaci datového typu, abychom ověřili jeho správnost dolů detail bitové úrovně), nebo interpretace není k dispozici (máme k dispozici některá data, ale nerozumíme struktuře dat a jejich představě).
Komentáře
- PDP-10 měl instrukce, jak zacházet s bajty proměnné velikosti. Nejběžnější byl sedmbitový ASCII, následovaný šestibitovými znaky.
Odpověď
Bajt je 8 bity. Bit je 0 nebo 1. „Nezpracovaná data“ jsou jen tok jednoho bajtu za druhým. Bajtový proud může pocházet ze souboru, síťového připojení, serializovaného objektu, generátoru náhodných čísel atd.
-
Existuje několik způsobů, jak zobrazit bajt: binární (01110110) , hex = hexadecimální (7C), osmičkový (0271) nebo desetinný (215). Ve všech případech je maximální hodnota 255 (základ 10).
-
Někdy jsou bajty přiřazeny znakům, například ascii. Na příkazovém řádku unixu napište „ascii“ a získáte velkou tabulku, která mapuje bajtové hodnoty 0-255 nebo (0-FF hex) na přidružený znak. Například mezera je x20 a „A“ je x40. Všimněte si, že některé hodnoty bajtů se mapují na řídicí znaky a nelze je tisknout. Samotné bajty však nejsou „znaky – jsou to jen svazky bitů. Číslo.
-
„reverzní 4 bajty“ by znamenalo vzít nějaké bajty 123 42 231 0 a převrátit pořadí – 0 231 42 123. Aplikováno na bajtovou páru, I „pravděpodobně přečte 4 bajty, převrátí je, přečte další 4 bajty atd.
(BTW, tento problém je relevantní, protože pokud chcete reprezentovat číslo větší než 255 jako bye, musíte použít více než jeden bajt. Otázkou ale je, zda je „největší“ bajt první nebo poslední? Tomu se říká big endian nebo malý endian – podívejte se na další informace o tom, proč je užitečné zamíchat bajty v surovém bajtovém proudu.)