js 任意进制转换方法如下:
一、JavaScript toString() 方法
1、定义和用法
数字的字符串表示。例如,当 radix 为 2 时,NumberObject 会被转换为二进制值表示的字符串。
2、语法
number.toString(radix)
3、参数值
参数 | 描述 |
---|---|
radix | 可选。规定表示数字的基数,是 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。
|
4、返回值
类型 | 描述 |
---|---|
String | 把数字转换为字符串 |
5、示例:
var count = 10;
console.log(count.toString()); // 输出 '10'
console.log((17).toString()); // 输出 '17'
console.log((17.2).toString()); // 输出 '17.2'
var x = 12;
console.log(x.toString(2)); // 输出 '1100' 10进制转2进制
console.log((254).toString(16)); // 输出 'fe' 10进制转16进制
console.log((10).toString(8)); // 输出 '12' 10进制转8进制
console.log((-0xff).toString(2)); // 输出 '-11111111' 16进制转2进制
二、JavaScript parseInt() 函数
1、定义和用法
parseInt() 函数可解析一个字符串,并返回一个整数。
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。
当忽略参数 radix , JavaScript 默认数字的基数如下:
- 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
- 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
- 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
2、语法
parseInt(string, radix)
参数 | 描述 |
---|---|
string | 必需。要被解析的字符串。 |
radix | 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。 |
3、示例:
//一个参数
parseInt("10"); // 10
parseInt("10.33"); // 10
parseInt("34 45 66"); // 34
parseInt(" 60 "); // 60
parseInt("40 years"); // 40
parseInt("He was 40"); // NaN
//两个参数
parseInt('123', 8) // 83 将'123'看作8进制数,返回十进制数83
parseInt("Hello", 8); // NaN 根本就不是数值
parseInt("546", 2); // NaN 除了“0、1”外,其它数字都不是有效二进制数字
parseInt("10",10); // 10
parseInt("10",8); // 8
parseInt("0x10"); // 16 将'0x10'看作16进制数,返回十进制数16
parseInt("10",16); // 16 将'10'看作16进制数,返回十进制数16
parseInt("010"); // 10 注意:旧浏览器由于使用旧版本的ECMAScript(ECMAScript版本小于ECMAScript 5,当字符串以"0"开头时默认使用八进制,ECMAScript 5使用的是十进制),所以在解析("010") 将输出8。
三、封装js String.format() 方法
var re = /%(?:(\d)?(\d)?(?:\.(\d+))?|\(([^)]+)\))([%bcdufosSxX])/g;
var dispatch = function (data) {
if (data.length == 1 && typeof data[0] == 'object') {
data = data[0];
return function (match, w, b, p, lbl, fmt, off, str) {
return formats[fmt](data[lbl]);
};
} else {
var idx = 0;
return function (match, w, b, p, lbl, fmt, off, str) {
return formats[fmt](data[idx++], p, w, b);
};
}
};
String.format = function () {
var as = [].slice.call(arguments), fmt = as.shift()
var s = "";
for (var i = 0; i < arguments.length; i++) {
s += arguments[i] + ",";
if (i == 0) {
fmt = arguments[0];
} else {
as[i - 1] = arguments[i];
}
}
return fmt.replace(re, dispatch(as));
}
var formats = {
'%': function (val) {
return '%';
},
'b': function (val) {
return parseInt(val, 10).toString(2);
},
'c': function (val) {
return String.fromCharCode(parseInt(val, 10));
},
'd': function (val) {
return parseInt(val, 10) ? parseInt(val, 10) : 0;
},
'u': function (val) {
return Math.abs(val);
},
'f': function (val, p) {
return (p > -1) ? Math.round(parseFloat(val) * Math.pow(10, p)) / Math.pow(10, p) : parseFloat(val);
},
'o': function (val) {
return parseInt(val, 10).toString(8);
},
's': function (val) {
return val;
},
'S': function (val, p) {
var len = p - val.toString().length;
for (i = 0; i < len; i++) val = '0' + val;
return val;
},
//'x': function(val) { return ('' + parseInt(val, 10).toString(16)).toLowerCase(); },
//'X': function(val) { return ('' + parseInt(val, 10).toString(16)).toUpperCase(); }
'x': function (val, p, a, b) {
var s = b ? new Array(b - 0 + 1).join(a || '') : '';
s += parseInt(val, 10).toString(16);
var ret = b ? s.slice(b * -1) : s;
return ret.toLowerCase();
},
'X': function (val, p, a, b) {
var s = b ? new Array(b - 0 + 1).join(a || '') : '';
s += parseInt(val, 10).toString(16);
var ret = b ? s.slice(b * -1) : s;
return ret.toUpperCase();
}
};
调用:
String.format("%02X", 10); // "0A" 10进制转16进制
String.format("%d", 0x100); // "256" 16进制转10进制
String.format("%b", 100); // "1100100" 10进制转2进制
String.format("%o", 100); // "144" 10进制转8进制
...