Kan någon förklara vad byte-strömmen egentligen innehåller? Innehåller den endast byte (hex data) eller binära data eller engelska bokstäver? Jag är också förvirrad över termen ”rådata”. Om någon bad mig ”omvända 4 byte-data”, vad ska jag anta att uppgifterna är hexkod eller binär kod?
Kommentarer
- Mina två cent är inte svarvärda (och det finns redan bra nedan) men jag vill bara ge länkar till dessa 2 artiklar som förmodligen kommer att ge god inblick i hur ” rådata ” tolkas så att det faktiskt betyder något (det betyder inte ’ t annat om du inte vet vad det ska representera och hur det är kodat / lagrad) betterexplained.com/articles/… joelonsoftware. com / artiklar / Unicode.html
- Jag tror att Java skapade byte för att undvika att använda c / c ++ ’ s char för saker som kan ’ t förstås som ett tecken. char användes mycket i c / c ++ eftersom storleken på char är 1 byte. Även enheter i unix är block- och karaktärsenheter. Om du läser från char-enheter får du ström av osignerade tecken / byte.
- Byte-strömmen är tvetydig. Oktettström är inte.
- Data kan tolkas på många nivåer. Längst ner är det ’ bara en serie av on-off elektriska nivåer. Lite högre upp ’ är en bit bitar, eller som du säger, en byte stream . Ännu högre upp börjar du tolka rådata. Byte kan tolkas som text på många sätt (kodningar). Heltalsnummer också (stor eller liten endian). Du kan till och med gå högre upp. Du har en zip-fil. Den zip-filen är din säkerhetskopia från igår. Och så vidare. Problemet är att den exakta nivån ofta är implicit och inte klargörs, och detta kan vara förvirrande.
Svar
Byte-strömmar innehåller, ja, byte. Uppdelad i vad det egentligen är, det är 8 bitar som består av 1s och 0s. Om det representerar ett tal, skulle det vara vilket nummer som helst från 0 till 255 (vilket jag kan tillägga är ingen tillfällighet varför de fyra siffrorna i en IP-adress alltid sträcker sig från 0 till 255). Byte strömmar är vanligtvis sofistikerade gränssnitt som är avsedda att dölja den underliggande grundläggande byte-arrayen som används för att hålla en cirkulär buffert (du fyller i bufferten och väntar på att någon tömmer den, då fyller den helt enkelt upp bufferten igen).
Vad representerar det? Tja, det kan representera en textfil eller en bild eller en live videoström. Vad det är beror helt på sammanhanget för vem som läser det. Hexrepresentation är ett annat sätt att säga samma sak, även om det ibland är bekvämare att hantera byte när det gäller deras hexrepresentation snarare än siffror men det är samma sak.
När du ”hänvisar till rådata hänvisar du vanligtvis till byte-data. Uppgifterna kommer utan en tagg som säger” Jag är en bildfil! ”Vanligtvis hanterar du bara rådata när du inte gör det” bryr mig inte verkligen om vad data representerar totalt sett. Om jag till exempel vill konvertera en bild till dess svartvita version kan jag säga att läsa en bilds rådata och för varje 3 byte som läses (vilket faktiskt skulle representera röd färg, representation av grön färg och bild av blå färg), lägg till dess talvärde och dela med 3, skriv sedan det värdet tre gånger. I huvudsak vad jag skulle göra är att ta en pixel ”s röda, gröna och blå värden och göra dess gråekvivalenta pixel från den Men när du pratar om att utföra operationer till data på nivån ”byte för byte” bryr du dig inte riktigt om helheten, så att säga.
Eller kanske du vill spara en fil i en databas, men den ber dig att infoga dess ”rådata” i en blob-datatyp. Detta innebär helt enkelt att konvertera data från en fil till en stor byte-array som databasen kan förstå och hantera. Du kommer att upptäcka att när du hämtar värdet från databasen blir det helt enkelt en stor byte-array som du ursprungligen gav till databasen till att börja med. Om dessa data var en fil måste du som programmerare tolka om den byten data som om du läser en fil en bit i taget.
Om någon bad dig ”omvända 4 byte-data”, skulle jag anta att det hänvisar till stor-endian vs liten-endian-tolkning av tal , som skriver siffror som börjar med den mest eller minst betydande byten. Det spelar ingen roll om ett tal representeras som big-endian eller little-endian, bara att alla system som läser numret tolkar det konsekvent.
Detta är inte att säga att den faktiska talrepresentationen (eller hexrepresentation för den delen) ändras, helt enkelt att ordningen i vilken dessa 4 byte gör ett tal ska vändas. Så säg att du har 0x01, 0x02, 0x03 och 0x04.För att vända dessa, skulle du ha 0x04, 0x03, 0x02, 0x01 istället. Systemet skulle förmodligen läsa dessa 4 byte i omvänd ordning och eftersom du redan har vänt det, tolkas värdet att det är detsamma som vad som var avsedd i rådata.
Jag hoppas att det förklarar det!
Kommentarer
- Allt är bra ..! Kan du snälla utarbeta svaret om ” rådata ”?
- @ user2720323 Okej, modifierad för att förklara bättre ” rådata. ” 🙂
- En sak att tänka på … all data är helt enkelt en samling av byte. Betydelsen av dessa byte definieras av någon form av metadata (filtillägg, databasfält, etc). En bildfil kan tolkas som en ASCII-fil och vice versa. Texten eller bilden kan vara meningslös, men det är fortfarande möjligt. (Derp … jag borde ha läst nästa svar)
- @kevincline Försök att uppskatta det faktum att jag ’ försöker förmedla en idé. Min prioritet är att ’ inte ska skriva en korrekt algoritm. Om du vill vara mer exakt väger du ’ de röda gröna och blå värdena enligt vad det mänskliga ögat kan uppfatta.
Svar
En byte är helt enkelt en informationsenhet – det kan vara vad som helst. En byte i sig betyder inte någonting, du måste fästa någon sorts mening till den.
Så, för att utöka det –
Innehåller den bara byte (hex data) eller binära data eller engelska bokstäver?
Hexdata är samma som binära data. Det ” s bara ett annat sätt att visa data. Till exempel 0x41 = 0b01000001 = ”A” = 65 (decimal). Engelska bokstäver skulle bara vara en delmängd av det.
Om någon frågade mig att ”vända 4 byte-data”, vad ska jag anta att data är hex-kod eller binär kod?
Eftersom hex bara är en representation av data spelar det ingen roll hur du tänker om det. Om du har data om 0x65 0x66 0x67 0x68
, för att vända det skulle du få 0x68 0x67 0x66 0x65
. Om du tittade på dessa uppgifter när det gäller tecken skulle du ursprungligen ha A B C D
, men nu har du D C B A
.
Tillbaka till en byte-ström – den ”bara en sekvens av data. Du måste veta vad data representerar för att kunna använda dem. Om vi läser en textfil skulle byteflödet som du får när du läser filen bara vara tecken av något slag. En körbar fil skulle ha en massa oskrivbara tecken i sig, varför den skulle kallas en binär fil. Det är uppenbart att det är möjligt att öppna en körbar i en textredigerare, men det gör inte något användbart.
Kommentarer
- +1 men betoningen på binärt i latbit verkar felplacerat. ” binära data ” innehåller ofta outskrivbara tecken, men det ’ heter ” binärt ” eftersom det ’ består av binära siffror, inte för att det innehåller tecken som inte kan skrivas ut . Jag förstår att du ’ använder ” binär ” i motsats till ” text ” data, men jag tror att detta kan förvirra OP ännu mer.
- Jag har en fråga angående återföring. Om jag har ett heltal (32 bitar) 325487 i en fil hur kan jag vända detta 4 byte heltal? På samma sätt har jag ett ord (” hai hur mår du ”), hur man vänder denna sträng genom att anta varje tecken som en byte.
- @ user2720323
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
Detta tar bokstavligen varje byte, förskjuter den i rätt position och kombineras med de andra.
Svar
En byte-ström är en ordnad sekvens av byte. Det finns en första byte som inte har någon föregångare. Dess efterträdare är den andra byten och så vidare. Numera förstås en byte allmänt att den består av åtta bitar. Om vi vill vara mer exakta använder vi termen octet stream och octet . Det finns fortfarande datorer med byte som inte är åtta bitar breda.
Hexadecimal är ett sätt att skriva siffror och fungerar som en tryckt representation för binär data. Hexadecimal är faktiskt text Exempelvis kan det hexadecimala värdet FE
representera en byte: bitarna 11111110
som har decimalvärdet 255
.FE
är dock faktiskt en teckensträng som består av tecknen F
och E
, vilket kräver två byte i teckenuppsättningen US-ASCII eller ISO-646! Dessa två byte är vad FE
är , och den enda byten med värdet 254 är vad FE
representerar som en tryckt notation.
Om en kommunikationskanal eller filhandtag eller någon sådan enhet beskrivs som att ha en byte-ström och ingen annan information ges, betyder det nästan säkert inte att byte representeras som hexadecimal text , så att varje abstrakt byte i strömmen kräver två fysiska byte.
Och rådata betyder helt enkelt bitar som inte tolkas för att ha någon struktur utöver bara ”array of bits”. Rådata har vanligtvis en struktur och representerar något, men när vi tittar på det som rådata ignorerar vi antingen tolkningen för tillfället (till exempel tittar vi på den råa representationen av en datatyp för att verifiera dess riktighet ner till bitnivå detaljer), eller tolkningen är inte tillgänglig (vi har en del data, men vi förstår inte datastrukturen och vad den representerar).
Kommentarer
- PDP-10 hade instruktioner för att hantera byte av variabel storlek. Det vanligaste var sju bitars ASCII, följt av sex-bitars tecken.
Svar
En byte är 8 bitar. En bit är 0 eller 1. ”rådata” är bara ett flöde av en byte efter en. En byte-ström kan komma från en fil, en nätverksanslutning, ett serieobjekt, en slumptalsgenerator etc.
-
Det finns flera sätt att visa en byte: binär (01110110) , hex = hexidecimal (7C), oktal (0271) eller decimal (215). I alla fall är det maximala värdet 255 (bas 10).
-
Ibland tilldelas byte till tecken, som ascii. Skriv ”ascii” på en unix-kommandorad, så får du en stor tabell som mappar bytevärdena 0-255 eller (0-FF hex) till tillhörande karaktär. Exempelvis är mellanslag x20 och ”A” är x40 Observera att vissa bytevärden kartläggs för att kontrollera tecken och inte kan skrivas ut. Men byten i sig är inte karaktärer – de är bara en bunt med bitar. Ett tal.
-
”omvänd 4 byte” skulle vara att ta några byte 123 42 231 0 och vända ordningen – 0 231 42 123. Tillämpad på en byteånga, jag ”läser antagligen 4 byte, vänder dem, läser nästa 4 byte osv.
(BTW är det problemet relevant, för om du vill representera ett nummer större än 255 som byes måste du använda mer än en byte. Men då är frågan, kommer den ”största” byten först eller sist? Det kallas big endian eller little endian – leta upp dem för mer bakgrund om varför det är användbart att blanda runt byten i en rå byte-ström.)