Kan noen forklare meg hva byte stream egentlig inneholder? Inneholder den bare byte (hex data) eller binære data eller engelske bokstaver? Jeg er også forvirret over begrepet «rådata». Hvis noen ba meg om å «reversere de 4 byte-dataene», hva skal jeg da anta at dataene er heksekode eller binær kode?
Kommentarer
- Mine to øre er ikke verdige svar (og det er allerede gode nedenfor), men jeg vil bare gi lenker til disse to artiklene som sannsynligvis vil gi god innsikt i hvordan » rådata » blir tolket til å faktisk bety noe (det betyr ikke ‘ t, med mindre du vet hva det skal representere og hvordan det er kodet / lagret) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html
- Jeg tror java opprettet byte for å unngå å bruke c / c ++ ‘ s char for ting som kan ‘ t forstås som et tegn. røye ble brukt mye i c / c ++ fordi størrelsen på røye er 1 byte. Også enheter i unix er enheter for blokk og karakter. Hvis du leser fra røykeenheter, får du strøm av usignerte tegn / byte.
- Byte-strømmen er tvetydig. Oktettstrøm er ikke.
- Data kan tolkes på mange nivåer. Nederst er det ‘ bare en serie elektriske nivåer på av. Litt høyere opp er ‘ en bit byte, eller som du sier, en byte stream . Enda høyere opp begynner du å tolke rådataene. Bytes kan tolkes som tekst på mange måter (kodinger). Heltall også (stor eller liten endian). Du kan til og med gå høyere opp. Du har en zip-fil. Den zip-filen er din sikkerhetskopi fra i går. Og så videre. Problemet er at det eksakte nivået ofte er implisitt og ikke blir tydelig, og dette kan være forvirrende.
Svar
Byte-strømmer inneholder, vel, byte. Brutt ned i hva det faktisk er, det er 8 biter sammensatt av 1s og 0s. Hvis det representerer et tall, ville det være et hvilket som helst tall fra 0 til 255 (som, kan jeg legge til, ikke er tilfeldig hvorfor de 4 tallene i en IP-adresse alltid varierer fra 0 til 255). Byte strømmer er vanligvis sofistikerte grensesnitt som er ment å skjule den underliggende grunnleggende byte-matrisen som brukes til å holde en sirkulær buffer (du fyller opp bufferen og venter på at noen skal tømme den, og den fyller bare bufferen en gang til).
Hva pokker representerer det? Vel, det kan representere en tekstfil, et bilde eller en live videostrøm. Hva det er er helt avhengig av konteksten for hvem som leser det. Hex-representasjon er en annen måte å si det samme på, selv om det noen ganger er mer praktisk å administrere byte når det gjelder deres hex-fremstilling i stedet for tall, men det er det samme.
Når du refererer til rådata, refererer du vanligvis til byte-data. Dataene kommer uten en tagg som sier «Jeg er en bildefil!» Vanligvis håndterer du bare rådata når du ikke gjør det » t virkelig bryr seg hva dataene representerer generelt. For eksempel, hvis jeg ønsket å konvertere et bilde til den sort / hvite versjonen, kan jeg si å lese et bildes rådata og for hver 3 byte som leses (som faktisk ville være representasjon av rød farge, representasjon av grønn farge og representasjon av blå farge), legg til tallverdien og divider med 3, og skriv deretter verdien 3 ganger. I det vesentlige er det jeg ville gjøre å beregne en rød, grønn og blå verdier av en piksel og lage den grå ekvivalente piksel fra den Men når du snakker om å utføre operasjoner til data på nivået «byte for byte», bryr du deg ikke veldig om det store bildet, for å si det sånn.
Eller kanskje du vil lagre en fil i en database, men den ber deg om å sette inn «rådata» i en blob-datatype. Dette betyr ganske enkelt å konvertere dataene til en fil til et stort byte-utvalg som databasen kan forstå og administrere. Du vil finne at når du henter den verdien fra databasen, vil det bare være ett stort byte-array som du opprinnelig ga til databasen til å begynne med. Hvis disse dataene var en fil, må du, programmereren, tolke byten på nytt. data som om du leste en fil en byte om gangen.
Hvis noen ba deg om å «reversere de 4 byte-dataene», antar jeg at det refererer til big-endian vs little-endian-tolkning av tall , som skriver tall som begynner med den mest eller minst signifikante byten. Det spiller ingen rolle om et tall er representert som big-endian eller little-endian, bare at alle systemer som leser tallet tolker det konsekvent.
Dette er ikke å si at den faktiske tallrepresentasjonen (eller sekskantrepresentasjonen for den saks skyld) er endret, bare at rekkefølgen som disse 4 bytene lager et tall skal reverseres. Så si at du har 0x01, 0x02, 0x03 og 0x04.For å reversere disse, ville du ha 0x04, 0x03, 0x02, 0x01 i stedet. Systemet vil antagelig lese disse 4 byte i omvendt rekkefølge, og siden du allerede har reversert, blir verdien tolket til å være den samme som det som var ment i rådataene.
Jeg håper det forklarer det!
Kommentarer
- Alt er bra ..! Kan du utdype svaret om » rådata «?
- @ user2720323 Ok, modifisert for å forklare bedre » rådata. » 🙂
- En ting å huske på … alle data er bare en samling av byte. Betydningen av disse bytene er definert av en slags metadata (filtype, databasefelt osv.). En bildefil kan tolkes som en ASCII-fil og omvendt. Teksten eller bildet kan være meningsløst, men det er fortsatt mulig. (Derp … Jeg burde ha lest de neste svarene)
- @kevincline Vennligst prøv å sette pris på det faktum at jeg ‘ prøver å formidle en idé. Min prioritet er ikke ‘ t for å skrive en nøyaktig algoritme. Hvis du ville være mer nøyaktig, veier du ‘ de rødgrønne og blå verdiene etter hva det menneskelige øye kan oppfatte.
Svar
En byte er ganske enkelt en informasjonsenhet – det kan være hva som helst. En byte i seg selv betyr ikke noe, du må feste en slags mening til den.
Så, for å utvide det –
Inneholder den bare byte (hex data) eller binære data eller engelske bokstaver?
Hex-data er de samme som binære data. Det » s bare en annen måte å vise dataene på. For eksempel 0x41 = 0b01000001 = «A» = 65 (desimal). Engelske bokstaver ville bare være en delmengde av det.
Hvis noen ba meg om å «reversere de 4 byte-dataene», hva skal jeg anta at dataene er heksekode eller binær kode?
Siden heksen bare er en representasjon av dataene, spiller det ingen rolle hvordan du tenker om det. Hvis du har data fra 0x65 0x66 0x67 0x68
, for å reversere det, vil du få 0x68 0x67 0x66 0x65
. Hvis du så på disse dataene mht. tegn, ville du opprinnelig ha A B C D
, men nå har du D C B A
.
Tilbake til en byte-strøm – den «er bare en sekvens av data. Du må vite hva dataene representerer for å kunne bruke dem. Hvis vi leser en tekstfil, vil byte-strømmen du får når du leser filen bare være tegn av noe slag. En kjørbar fil vil ha en haug med utskriftsvennlige tegn i seg, og det er derfor den vil bli kalt en binær fil. Det er tydelig at det er mulig å åpne en kjørbar i en tekstredigerer, men den gjør ikke noe nyttig.
Kommentarer
- +1 men vektleggingen av binær i lat bit virker feilplassert. » binære data » inneholder ofte tegn som ikke kan skrives ut, men det ‘ heter » binær » fordi den ‘ består av binære sifre, ikke fordi den inneholder tegn som ikke kan skrives ut . Jeg forstår at du ‘ bruker » binær » i motsetning til utskrivbar » tekst » data, men jeg tror dette kan forvirre OP enda lenger.
- Jeg har ett spørsmål angående reversering. Hvis jeg har et heltall (32 bit) 325487 i en fil, hvordan kan jeg reversere dette 4 byte heltallet? på samme måte har jeg et ord (» hai hvordan har du det «), hvordan du kan reversere denne strengen ved å anta hvert tegn som en byte.
- @ user2720323
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
Dette tar bokstavelig talt hver byte, skifter den i riktig posisjon og kombineres med de andre.
Svar
En byte-strøm er en ordnet bytesekvens. Det er en første byte, som ikke har noen forgjenger. Etterfølgeren er den andre byten, og så videre. I dag er en byte allment forstått å bestå av åtte biter. Hvis vi ønsker å være mer presise, bruker vi begrepet oktettstrøm og oktett . Det finnes fortsatt datamaskiner med byte som ikke er åtte bits brede.
Hexadecimal er en måte å skrive tall på, og fungerer som en utskrevet representasjon for binære data. Hexadecimal er faktisk tekst For eksempel kan den heksadesimale verdien FE
representere en byte: bitene 11111110
som har desimalverdien 255
.Imidlertid er FE
faktisk en tegnstreng som består av tegnene F
og E
, som krever to byte i US-ASCII eller ISO-646 tegnsett! Disse to byte er hva FE
er , og enkeltbyten med verdien 254 er det FE
representerer , som en trykt notasjon.
Hvis en kommunikasjonskanal, et filhåndtak eller en slik enhet er beskrevet som bærer en byte-strøm, og ingen annen informasjon blir gitt, betyr det nesten helt sikkert ikke at byte er representert som heksadesimal tekst , slik at hver abstrakte byte i strømmen krever to fysiske byte.
Og rådata betyr ganske enkelt biter som ikke tolkes til å ha noen struktur utover bare «matrisebiter». Rådata har vanligvis en struktur og representerer noe, men når vi ser på det som rådata, ignorerer vi enten tolkningen for øyeblikket (for eksempel ser vi på den rå representasjonen av en datatype for å verifisere korrektheten ned til detaljnivået på bitnivået), eller tolkningen er ikke tilgjengelig (vi har noen data, men vi forstår ikke strukturen til dataene og hva de representerer).
Kommentarer
- PDP-10 hadde instruksjoner om å håndtere byte av variabel størrelse. Den vanligste var syv-biters ASCII, etterfulgt av seks-biters tegn.
Svar
En byte er 8 biter. Litt er 0 eller 1. «Rå data» er bare en strøm av den ene byten etter den andre. En byte-strøm kan komme fra en fil, en nettverkstilkobling, et serieobjekt, en tilfeldig tallgenerator osv.
-
Det er flere måter å vise en byte: binær (01110110) , heks = heksidecimal (7C), oktal (0271) eller desimal (215). I alle tilfeller er maksimumsverdien 255 (base 10).
-
Noen ganger blir byte tildelt tegn, som ascii. Skriv «ascii» på en unix-kommandolinje, og du får en stor tabell som tilordner byteverdiene 0-255 eller (0-FF hex) til det tilhørende tegnet. For eksempel er mellomrom x20 og «A» er x40 . Merk at noen byteverdier tilordnes for å kontrollere tegn og ikke kan skrives ut. Men bytene i seg selv er ikke tegn – de er bare en bunt med biter. Et tall.
-
«omvendt 4 byte» ville være å ta noen byte 123 42 231 0 og snu rekkefølgen – 0 231 42 123. Brukes på en byte-damp, jeg «hadde sannsynligvis lest 4 byte, reversert dem, lest de neste 4 bytene osv.
(BTW er problemet relevant, for hvis du vil representere et tall større enn 255 som byes, må du bruke mer enn en byte. Men så er spørsmålet, kommer den «største» byten først eller sist? Det kalles stor endian eller liten endian – se dem opp for mer bakgrunn om hvorfor det er nyttig å blande rundt bytene i en rå byte-strøm.)