Преобразование восьмеричных и шестнадцатеричных чисел в основание 10 - PullRequest
6 голосов
/ 23 февраля 2012

Я пытаюсь понять восьмеричные и шестнадцатеричные вычисления 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

Ответы [ 3 ]

6 голосов
/ 23 февраля 2012

parseInt преобразует аргумент в строку перед его разбором:

  1. Пусть 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");
2 голосов
/ 01 апреля 2013

Я написал функцию, которая может преобразовывать число из одной базы в другую, где начальная база и новая база указываются в качестве параметров.

function convertFromBaseToBase(str, fromBase, toBase){
    var num = parseInt(str, fromBase);
    return num.toString(toBase);
}

alert(convertFromBaseToBase(10, 2, 10));

http://jsfiddle.net/jarble/p9ZLa/

0 голосов
/ 23 февраля 2012

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, выполняя преобразование base во второй раз.

...