Mam adres MAC zapisany jako nieprzetworzony 48-bitowy numer i chcę go podzielić i wydrukować w standardowym formacie szesnastkowym xx: xx: xx: xx: xx: xx. Na przykład liczba nieprzetworzona 81952921372024 powinna wynieść 78: 45: c4: 26: 89: 4a. Moja pierwsza próba byłaKonwertuj całkowity adres MAC na ciąg w JavaScript
var suspect = {mac: 2333752735057272};
console.log(
Number(suspect.mac & 0xFF).toString(16) + ":" +
Number((suspect.mac & 0xFF00) >> 8).toString(16) + ":" +
Number((suspect.mac & 0xFF0000) >> 16).toString(16) + ":" +
Number((suspect.mac & 0xFF000000) >> 24).toString(16) + ":" +
Number((suspect.mac & 0xFF00000000) >> 32).toString(16) + ":" +
Number((suspect.mac & 0xFF0000000000) >> 48).toString(16));
Ale ponieważ Javascript najwyraźniej nie może obsługiwać 32-bitowe liczby całkowite> podczas wykonywania pracy zmianowej, ostatnie dwa oktety zawsze wyjdzie na 0,
78:45:c4:26:0:0
'2333752735057272..toString (16)' '84a8926c44578' daje mi w Chrome. Co jeśli to zrobisz, wykadruj pierwszą cyfrę i odwróć oktety? – bfavaretto
Jesteś pewien, że adres MAC jest właściwy? Wygląda na to, że jest poza zasięgiem. – user2357112
Rzeczywiście, JavaScript nie ma pojęcia> 32-bitowych liczb całkowitych, a nawet naprawdę 32-bitowych liczb całkowitych; ma po prostu typ 'number', co oznacza podwójną precyzję (64-bitowe) wartości zmiennoprzecinkowe, a różne operacje typu integer-y, takie jak przesunięcia bitowe, wykonują niejawną konwersję do 32-bitowych liczb całkowitych. – ruakh