У меня есть MAC-адрес, который хранится как необработанное 48-битное число, и я хочу разбить его и напечатать в стандартном шестнадцатеричном формате xx: xx: xx: xx: xx: хх. Например, необработанный номер 81952921372024 должен стать 78: 45: c4: 26: 89: 4a. Моя первая попытка была,Преобразование целочисленного MAC-адреса в строку в 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));
Но поскольку Javascript, по-видимому, не может обрабатывать> 32-битные целые числа при выполнении операций сдвига, последние два октета всегда выходят на 0,
78:45:c4:26:0:0
'2333752735057272..toString (16)' 'дает 84a8926c44578' мне в Chrome. Что, если вы возьмете это, обрезаете первую цифру и отмените октеты? – bfavaretto
Вы уверены, что MAC-адрес правильный? Он выглядит вне пределов до меня. – user2357112
Действительно, JavaScript не имеет понятия о 32-битных целых числах или даже о 32-битных целых числах; он просто имеет тип «номер», означающий значения с плавающей запятой с двойной точностью (64-разрядные), а различные операции целочисленного типа, такие как сдвиги бит, выполняют неявное преобразование в 32-битные целые числа и из них. – ruakh