2012-06-19 43 views
21

有人能給我一點建議嗎?將數字的二進制表示從字符串轉換爲int -Javascript

我有一個字符串,例如「01001011」,我需要做的是將其反轉,因此我使用.split('')而不是.reverse(),現在我需要將該數組讀取爲字符串並將其轉換爲整數。可能嗎?

感謝

+0

如果你想要做的這個倒數,在這裏看到:http://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary- in-javascript –

回答

39

如果你想在數組轉換回字符串使用join()(​​)和一個字符串轉換爲整數使用parseInt()MDN)。後者的第二個參數是一個可選的基數。

JavaScript將嘗試確定使用哪種基數,但要確保始終應手動添加基數。從MDN舉例:

如果基數是未定義的或0,JavaScript的假定:

  • 如果輸入字符串開頭 「0x」 或 「0X」,基數爲16(十六進制)。

  • 如果輸入字符串以「0」開始,則基數爲八(八進制)。這個功能是非標準的,有些實現故意不支持它(而是使用基數10)。出於這個原因,當使用parseInt時總是指定一個基數。

  • 如果輸入字符串以任何其他值開頭,則基數爲10(十進制)。

所以你的情況下面的代碼應該工作:

var a = '01001011'; 

var b = parseInt(a.split('').reverse().join(''), 2); 

或只是(如果你想開始字符串轉換,沒有反轉):

var b = parseInt(a, 2); 
12

只需撥打parseInt用不同的基數,在這種情況下,使用2二進制。

var a = parseInt("01001011", 2); 
// a === 75 

parseInt試圖找出基數本身,當你沒有明確指定它。 From the Mozilla Developer Network

如果基數是undefined或0,JavaScript的假定:

  • 如果輸入string以 「0x」 或 「0X」 開頭,基數爲16(十六進制)。
  • 如果輸入string以「0」開始,則基數爲八(八進制)。這個功能是非標準的,有些實現故意不支持它(而是使用基數10)。由於這個原因,在使用parseInt時總是指定一個基數。
  • 如果輸入string以任何其他值開頭,則基數爲10(十進制)。

在這種情況下,它是至關重要的,你做指定的基數,否則它可能被解釋爲十進制或八進制數。根據經驗,總是指定基數。

+1

請注意,在這種情況下,默認基數實際上是8,因爲字符串以'0'開頭。 –

2

這將採用十六進制緩衝區並將其轉換爲二進制str並返回到十六進制緩衝區。注意:當我說一個緩衝區十六進制,我的意思是一個十進制值,因爲當你迭代一個緩衝區,並拉動數組中的每個項目,它會給你十進制值(例如:210,而不是d2)。

var buffer - new Buffer([0, 210, 242]); // Node

// var arrayBuffer = new ArrayBuffer(3); // JavaScript

// var uint8 = new Uint8Array(arrayBuffer); // JavaScript/ 16Array, 32Array, etc

需要與緩衝區相識

你會用for(){}遍歷緩衝區內,你可以這樣做:

(210).toString(2); // '11010010'

(210).toString(16); // 'd2' (untested)

(210).toString(8); // (Octal-Digits representation)

parseInt((210).toString(2), 2); // 210

parseInt((210).toString(2), 2).toString(16); // 'd2'

顯然,而是採用 「(210).toString(2)」 IN YOU FOR循環,你可以使用 「(buffer[i]).toString(2)

Endian的聲譽是由你決定! :)(array.reverse())

希望這有助於!

PS。 parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2

parseInt((210).toString(2).substring(5, 8), 2); // 2

相關問題