Fråga om bytes och hexadecimal

Permalänk
Inaktiv

Fråga om bytes och hexadecimal

I boken "Pro DNS and BIND" står det:

The internal (machine) representation of the byte (octet) is known as hexadecimal and may contain the hexadecimal values 00 to FF. Dotted decimal simply converts the 8-bit value for each byte to its decimal value and separates each value with a dot to make it more readable.

I andra sammanhang läser jag ofta att byte oftast är den minsta adresserbara enheten i datorer. Hänger detta ihop? Är det så att varje octet förvaras i hex?

Har alltid haft svårt att förstå sambandet mellan bitar och decimal representation i IP-adresser, men om det är som ovan så "klickar" det mer för mig.

Permalänk
99:e percentilen

I praktiken är byte och octet nästan alltid synonyma och betyder åtta bitar.

(Utgår från att du förstår positionstalsystem, men en kort sammanfattning: En siffra d på position n i ett tal med bas b är värd d × bn. Positionen är nollindexerad. Exempelvis är siffran 3 i 6 374 värd 3 × 102. Hela talet är värt summan av alla sina siffrors värde.)

Om vi tänker på vanliga hederliga IPv4-adresser består de ju av 32 bitar. Delar vi upp en sådan bitsträng i fyra lika stora delar består varje del av åtta bitar, alltså en byte. Det största tal som går att uttrycka med åtta bitar är förstås 1111 11112, vilket är 1 mindre än 1 0000 00002 (analogt med hur det största tresiffriga decimala talet 999 är 1 mindre än 1 000), alltså 1 × 28 − 1 = 255.

Eftersom vi människor är vana vid att tolka decimala tal representerar vi gärna IP-adresser decimalt, och vi gör det (för IPv4) genom att betrakta varje byte för sig, som var och en alltså är ett tal i intervallet [0, 1111 11112], alltså [0, 255]. En IP-adress kan alltså representeras som fyra decimala tal mellan 0 och 255 (med en punkt emellan för läsbarhet).

Hexadecimalt då? Hexadecimalt betyder bas 16 (i motsats till exempelvis 2 eller 10). Då måste det finnas 16 siffror, vilka konventionellt är 0–9 och sedan A–F, där F16 = 1510. För att indikera hexadecimalt används ofta prefixet 0x, så 0xX = X16.

Vi kan förstås uttrycka vilket heltal som helst i vilken bas som helst, och just bas 16 lirar väldigt bra med bas 2, eftersom log2(16) är ett heltal. Betrakta talet 0xFF. Det är värt 15 × 161 + 15 × 160 = 255. Två hexadecimala siffror räcker alltså precis för att representera en byte.

Allting i en dator lagras och behandlas i slutänden i binär form, men vi kan välja att representera binära tal i en annan bas för att det ska bli lättare för oss att tolka. Så till exempel kan vi skriva 0xF5 eller 245 istället för det klumpiga och svårtolkade 1111 01012, som datorn "ser".

Följande gäller:

1111 11112 = FF16 = 0xFF = 28 − 1 = 25510

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

En IP-adress är som Alling skriver 32 stycken bitar som är uppdelade i fyra delar(oktetter) för att det ska bli lättare för oss att läsa.

Ett exempel

192.168.25.1
Blir binärt
1100 0000.1010 1000.0001 0011.0000 00001
Om du använder Hex blir varje oktett två siffror (fyra bitar per Hexadecimal siffra)
C0.A8.19.1

Överkurs:
Så om du tar bort punkterna och läser ip-adressen som ett sammanhängande tal så blir 192.168.25.1 = 3 232 240 385

Visa signatur

Du behöver inte vaccinera dina barn, bara dom du vill behålla.