我试图理解javascript八进制和十六进制计算。我知道我可以使用parseInt(string, radix)
来获取整数值。
例如,当我尝试这个时,为什么值不同?
var octal = parseInt('026', 8);
var octal1 = parseInt('030', 8);
alert(octal); //22
alert(octal1); //24
var hex = parseInt('0xf5', 16);
var hex1 = parseInt('0xf8', 16);
alert(hex); //245
alert(hex1); //248
但如果我尝试将其保存在数组中,为什么答案会有所不同且不正确?
var x = new Array(026, 5, 0xf5, "abc");
var y = new Array(030, 3, 0xf8, "def");
alert('026 is ' + parseInt(x[0],8)); //18
alert('0xf5 is ' + parseInt(x[2],16)); //581
alert('030 is ' + parseInt(y[0],8)); //20
alert('0xf8 is ' + parseInt(y[2],16)); //584
答案 0 :(得分:6)
parseInt
在解析之前将参数转换为字符串:
- 让inputString为ToString(string)
醇>
所以:
0x35.toString() // "53"
parseInt( "53", 16 ); //83
parseInt( 0x35, 16 ); //83
您在阵列中拥有的内容大部分已经是数字,因此无需解析它们。如果将它们更改为字符串,您将获得预期的结果:
var x = new Array("026", "5", "0xf5", "abc");
var y = new Array("030", "3", "0xf8", "def");
答案 1 :(得分:2)
我编写了一个可以将数字从一个基数转换为另一个基数的函数,其中起始基数和新基数被指定为参数。
function convertFromBaseToBase(str, fromBase, toBase){
var num = parseInt(str, fromBase);
return num.toString(toBase);
}
alert(convertFromBaseToBase(10, 2, 10));
答案 2 :(得分:0)
0xf5
245
;它不是需要解析的字符串:
console.log( "0xf5" ); //-> 0xf5
console.log( parseInt("0xf5",16) ); //-> 245
console.log( 0xf5 ); //-> 245
console.log( parseInt(0xf5,16) ); //-> 581
console.log( parseInt("245",16) ); //-> 581
console.log( parseInt(245,16) ); //-> 581
同样,字符串外的026
是整数22
:
console.log( 026 ); //-> 22
你正在做的是将已经转换为base10的整数传递给parseInt()
,然后将它们转换为字符串并将base10解释为base16,再次执行基本转换。