我有一个存储为原始48位数字的MAC地址,我想将其拆分并以标准十六进制格式xx:xx:xx:xx:xx:xx:xx打印。例如,原始数字81952921372024应该变成78:45:c4:26:89:4a。我的第一次尝试是,
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));
但是,由于Java在执行移位操作时显然无法处理> 32位整数,因此最后两个八位字节总是为0,
78:45:c4:26:0:0
一种简单的方法如下:
var mac = 81952921372024;
mac.toString( 16 ) // "4a8926c44578"
.match( /.{1,2}/g ) // ["4a", "89", "26", "c4", "45", "78"]
.reverse() // ["78", "45", "c4", "26", "89", "4a"]
.join( ':' ) // "78:45:c4:26:89:4a"
> "78:45:c4:26:89:4a"
但是我建议仅在整数非常短(即00
)的病理情况下放置其他mac = 150
组:
var mac = 81952921372024;
new Array( 6 ).join( '00' ) // '000000000000'
.match( /../g ) // [ '00', '00', '00', '00', '00', '00' ]
.concat(
mac.toString( 16 ) // "4a8926c44578"
.match( /.{1,2}/g ) // ["4a", "89", "26", "c4", "45", "78"]
) // ["00", "00", "00", "00", "00", "00", "4a", "89", "26", "c4", "45", "78"]
.reverse() // ["78", "45", "c4", "26", "89", "4a", "00", "00", "00", "00", "00", "00", ]
.slice( 0, 6 ) // ["78", "45", "c4", "26", "89", "4a" ]
.join( ':' ) // "78:45:c4:26:89:4a"
> "78:45:c4:26:89:4a"
以下内容完成工作,
var hexValue = parseInt('44873434449413').toString(16);
var macaddress = [];
for (var i=0; i < hexValue.length; i=i+2) {
macaddress.push(hexValue.substr(i,2));
}
console.log(macaddress.join(':'));
输出:28:cf:e9:1e:c6:05
编辑:
注意尾随0's>
str='3'; if (str.length < 12) { str = pad_after(str, 12, 0);} var hexValue = parseInt(str).toString(16); if (hexValue.length < 12) { hexValue = pad_before(hexValue, 12, 0);} var macaddress = []; for (var i=0; i < hexValue.length; i=i+2) { macaddress.push(hexValue.substr(i,2)); } console.log(macaddress.join(':')); function pad_before(n, width, z) { z = z || '0'; n = n + ''; return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; } function pad_after(n, width, z) { z = z || '0'; n = n + ''; return n.length >= width ? n : n + new Array(width - n.length + 1).join(z); }
输出:
00:45:d9:64:b8:00
接受的答案未通过我的单元测试(将mac地址转换为数字然后转换回并期望结果等于输入)。>>
如@blueren所述,接受的答案将返回相反的结果。