将整数MAC地址转换为Javascript中的字符串
Convert integer MAC address to string in Javascript
我有一个MAC地址存储为一个原始的48位数字,我想将其拆分并以标准十六进制格式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));
但由于Javascript在执行移位操作时显然无法处理大于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"
然而,当您的整数很短(即mac = 150
)时,我建议只为病理病例添加额外的00
组:
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的
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所说,接受的答案返回相反的结果。
我的版本是:
(mac_num).toString(16).padStart(12, '0').match(/../g)
.reverse()
.slice(0, 6)
.reverse()
.join(':')
我的测试:
expect(mac.toString(mac.toLong('b4:ae:2b:db:1c:3d'))).to.deep.equal('b4:ae:2b:db:1c:3d');
expect(mac.toString(mac.toLong('00:00:00:db:1c:3d'))).to.deep.equal('00:00:00:db:1c:3d');
expect(mac.toString(mac.toLong('b4:ae:2b:00:00:00'))).to.deep.equal('b4:ae:2b:00:00:00');
expect(mac.toString(mac.toLong('00:00:00:00:00:00'))).to.deep.equal('00:00:00:00:00:00');
expect(mac.toString(mac.toLong('10:00:00:00:00:00'))).to.deep.equal('10:00:00:00:00:00');
expect(mac.toString(mac.toLong('00:00:01:00:00:00'))).to.deep.equal('00:00:01:00:00:00');
expect(mac.toString(mac.toLong('00:00:00:00:00:01'))).to.deep.equal('00:00:00:00:00:01');
相关文章:
- 可变大小的JavaScript字符串如何成为基元类型
- 如何将angularjs中的javascript字符串输出为循环数组
- 如何使用gump任务将html转换为javascript字符串
- 替换变量时,JavaScript字符串replace()不起作用
- 如何替换JavaScript字符串中除字母和数字之外的所有内容(空格/符号)
- 如何从django中的url解析javascript字符串
- 拆分javascript字符串以获得所需的值
- 使用Bootstrap'在Javascript字符串中的popover插件
- 如何替换javascript字符串中的前三个连字符
- 将JavaScript字符串转换为整数
- jquery/javascript字符串中的撇号
- 正在对java中的javascript字符串进行转义
- 如何在Javascript字符串中添加vaule
- Javascript:字符串中有效的基于数组的替换
- 具有负值的Javascript字符串.slice()
- javascript字符串替换$1(如果它是某个值)
- 将子函数的JavaScript字符串转换为实际函数
- JavaScript字符串中的换行符也保存为.txt
- 将Javascript字符串var传递给HTML href标记
- JavaScript 字符串字母和数字检查