您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
在编程中,我们经常需要在不同的进制之间进行转换。JavaScript提供了多种方法来实现十进制、二进制、八进制和十六进制之间的相互转换。本文将详细介绍这些方法,并提供实用的代码示例。
在开始之前,让我们先回顾一下进制的基本概念:
JavaScript的parseInt()
函数可以将字符串从指定进制转换为十进制:
// 二进制转十进制
console.log(parseInt('1010', 2)); // 输出: 10
// 八进制转十进制
console.log(parseInt('12', 8)); // 输出: 10
// 十六进制转十进制
console.log(parseInt('A', 16)); // 输出: 10
parseInt()
会忽略这些字符及其后面的所有字符NaN
Number对象的toString()
方法可以将十进制数转换为其他进制:
const num = 10;
// 十进制转二进制
console.log(num.toString(2)); // 输出: "1010"
// 十进制转八进制
console.log(num.toString(8)); // 输出: "12"
// 十进制转十六进制
console.log(num.toString(16)); // 输出: "a"
JavaScript还支持直接使用特定前缀表示不同进制的数字:
// 二进制前缀 0b
console.log(0b1010); // 输出: 10
// 八进制前缀 0o (ES6新增)
console.log(0o12); // 输出: 10
// 十六进制前缀 0x
console.log(0xA); // 输出: 10
虽然JavaScript没有直接提供进制间转换的函数,但我们可以结合上述方法实现:
function binaryToHex(binaryStr) {
return parseInt(binaryStr, 2).toString(16);
}
console.log(binaryToHex('1010')); // 输出: "a"
function hexToBinary(hexStr) {
return parseInt(hexStr, 16).toString(2);
}
console.log(hexToBinary('A')); // 输出: "1010"
当处理大数时,JavaScript的数字精度可能会出现问题:
const bigNum = 12345678901234567890;
console.log(bigNum.toString(2)); // 可能不准确
解决方案是使用BigInt:
const bigNum = BigInt('12345678901234567890');
console.log(bigNum.toString(2)); // 准确的二进制表示
function padZero(numStr, length) {
while (numStr.length < length) {
numStr = '0' + numStr;
}
return numStr;
}
console.log(padZero((10).toString(2), 8)); // 输出: "00001010"
function convertBase(numStr, fromBase, toBase) {
const num = parseInt(numStr, fromBase);
return num.toString(toBase);
}
console.log(convertBase('1010', 2, 16)); // 输出: "a"
function ipToBinary(ip) {
return ip.split('.').map(octet =>
parseInt(octet).toString(2).padStart(8, '0')
).join('.');
}
console.log(ipToBinary('192.168.1.1'));
// 输出: "11000000.10101000.00000001.00000001"
function rgbToHex(r, g, b) {
return '#' + [r, g, b].map(x =>
x.toString(16).padStart(2, '0')
).join('');
}
console.log(rgbToHex(255, 165, 0)); // 输出: "#ffa500"
对于大量数据的进制转换,性能可能成为问题。以下是一些优化建议:
大多数现代浏览器都支持上述方法,但需要注意:
BigInt
在IE中不支持0o
八进制表示法是ES6新增的parseInt
的实现有细微差异JavaScript提供了强大的内置方法来进行进制转换:
parseInt(string, radix)
将字符串从指定进制转换为十进制number.toString(radix)
将数字转换为指定进制的字符串BigInt
掌握这些方法可以让你在处理数字表示、编码解码、数据存储等场景时更加得心应手。
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | A |
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。