2012-02-23 14 views
6

में कनवर्ट करना मैं जावास्क्रिप्ट ऑक्टल और हेक्साडेसिमल कंप्यूटेशंस को समझने की कोशिश कर रहा हूं। मुझे पता है कि मैं इंटीजर मान प्राप्त करने के लिए parseInt(string, radix) का उपयोग कर सकता हूं।ऑक्टेटल और हेक्साडेसिमल संख्याओं को आधार 10

उदाहरण के लिए, जब मैं कोशिश करता हूं तो मान अलग क्यों होते हैं?

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

आप ठीक कह रहे हैं। पहला हिस्सा अनावश्यक है। 'अलर्ट (026) '' 22' मिलेगा। सरणी के बारे में कैसे? – theking963

+1

ध्यान दें कि 'var foo = new Array (...); 'var foo = [...] पर लगभग कभी भी बेहतर नहीं है;' जैसा कि पूर्व अधिक बाइट्स, धीमे, और कार्यात्मक रूप से समतुल्य है। – Phrogz

उत्तर

6

parseInt यह पार्स करने से पहले स्ट्रिंग के लिए तर्क धर्मान्तरित:

  1. Let हो inputString ToString (स्ट्रिंग)

तो:

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"); 
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() पर पूर्णांक, जो तब उन्हें तारों में परिवर्तित करता है और आधार 10 के रूप में बेस 10 के रूप में व्याख्या करता है, दूसरी बार आधार रूपांतरण करता है।

+0

'026 === 22' अनिवार्य रूप से एक्मास्क्रिप्ट 5 में मान्य अभिव्यक्ति नहीं है क्योंकि ऑक्टल अक्षर गैर-मानक हैं। विवरण के लिए [spec] (http://es5.github.com/#B.1.1) देखें। –

1

मैंने एक ऐसा फ़ंक्शन लिखा है जो एक आधार से दूसरे स्थान पर एक संख्या को परिवर्तित कर सकता है, जहां प्रारंभिक आधार और नया आधार पैरामीटर के रूप में निर्दिष्ट किया गया है।

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

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

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

संबंधित मुद्दे