04. juli 2006 - 18:08Der er
5 kommentarer og 2 løsninger
Fra string( hex numre fra en mac addr) til byte[6]
Yo,
Hvad er den nemmeste måde få lavet en MAC om til at byte[]...
Har følgende: 00137218ECB2.... og det skulle så gerne blive til: 0 19 114 24 236 178
Bruger følgende lige nu: byte[] myByte = new byte[6]; for (int i = 0; i < 6; i++) { myByte[i] = byte.Parse(mac.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber); }
havde kigget på System.Text.Encoding.xxx.GetBytes() men det giver mig en byte for hvert tegn, altså en byte[12] og det dur ik'...
For at der skal "være" plads nok, bruger jeg en Int64 (= long) i stedet for en int (= Int32). Kunne også have brugt ulong som Arne_v (egentlig et mere naturligt valg idet der jo aldrig kan blive tale om et negativt tal alligevel). Den decimale værdi er i dette tilfælde: 83518614706.
For at konvertere MAC-adressen til dens byte-form er det centralt at vide at repræsentationen ”0 19 114 24 236 178” skal læses som tallet:
// Konversion til byte-array. byte[] macByte = new byte[6]; for (int pos = 5; pos >= 0; pos--) { macByte[pos] = (byte) (macInt % 256); macInt /= 256; }
Jeg har valgt at lægge værdierne i byte-arrayet i denne rækkefølge:
(0, 19, 114, 24, 236, 178)
En anden, og faktisk mere naturlig måde indenfor programmering, ville være denne form:
(178, 236, 24, 114, 19, 0)
For at finde de enkelte bytes i tallet 83518614706, benytter jeg dels ”%” (modulus, eller ”resten af division med”), og dels ”/” som i dette tilfælde er heltalsdivision (fordi at ingen af dividenderne er floats).
Værdien af:
83518614706 % 256
er lig med ”resten af 83518614706 ved division med 256”. I dette tilfælde giver det os værdien 178 som er det ”ciffer” som ligger længst til højre i byte-arrayet:
Efter at have fundet “cifret” via %, divideres der med 256 (husk at ”macInt /= 256” skal læses som ”macInt = macInt / 256”). Formålet med dette er at reducere tallet – populært sagt at smide 256-potensen yderst til højre væk. I alt ser det nogenlunde sådan her ud:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.