2012-06-19 15 views
21

Czy ktoś może dać mi małą radę, proszę?Konwertuj binarną reprezentację liczby z ciągu znaków na int -Javascript

Mam ciąg znaków, na przykład "01001011" i muszę go odwrócić, więc użyłem .split('') niż .reverse() i teraz muszę odczytać tablicę jako ciąg znaków i przekonwertować go na liczbę całkowitą. Czy to możliwe?

Dzięki

+0

Jeśli chcesz zrobić odwrotność tego, zobacz tutaj: http://stackoverflow.com/questions/9939760/how-do-i-convert-an-integer-to-binary- in-javascript –

Odpowiedz

39

Jeśli chcesz przekonwertować tablicę z powrotem do łańcucha użyć join() (MDN) oraz do konwertowania ciąg do użytku całkowitej parseInt() (MDN). Drugim argumentem późniejszym jest opcjonalna podstawa.

JavaScript spróbuje określić, jakiego radix użyć, ale upewnij się, że zawsze powinieneś zawsze dodawać swoją podstawkę ręcznie. Powołując się od MDN:

Jeśli podstawa jest niezdefiniowany lub 0, JavaScript zakłada następujące:

  • Jeżeli ciąg wejściowy zaczyna się od "0x" lub "0X", podstawa jest 16 (szesnastkowy).

  • Jeśli ciąg wejściowy rozpoczyna się od "0", podstawa wynosi osiem (ósemkowo). Ta funkcja jest niestandardowa, a niektóre implementacje celowo jej nie obsługują (zamiast tego za pomocą radix 10). Z tego powodu zawsze podawaj podstawkę przy użyciu parametru parseInt.

  • Jeśli ciąg wejściowy rozpoczyna się od dowolnej innej wartości, podstawa wynosi 10 (dziesiętnie).

Więc w twoim przypadku następujący kod powinien działać:

var a = '01001011'; 

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

czy tylko (czy chcesz przekonwertować ciąg rozpoczynający, bez odwracania):

var b = parseInt(a, 2); 
12

Wystarczy zadzwonić parseInt z innym radix, w tym przypadku zastosowania 2 na binarny.

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

parseInt próby, aby dowiedzieć się samego przelicznika, jeśli nie jawnie określić go. From the Mozilla Developer Network:

Jeśli podstawa jest undefined lub 0, JavaScript zakłada się, że:

  • Jeżeli wejście string zaczyna się od "0 x" lub "0X" podstawa jest 16 (szesnastkowo).
  • Jeśli wejście rozpoczyna się od "0", podstawa wynosi osiem (ósemkowo). Ta funkcja jest niestandardowa, a niektóre implementacje celowo jej nie obsługują (zamiast tego za pomocą radix 10). Z tego powodu zawsze należy podać podstawkę pod numer parseInt.
  • Jeśli wejście string rozpoczyna się od dowolnej innej wartości, podstawa wynosi 10 (dziesiętnie).

W tym przypadku ważne jest, aby to zrobić należy określić przelicznika, gdyż w przeciwnym razie może to być interpretowane jako albo po przecinku lub liczby ósemkowej. Jako regułę zawsze podawaj podstawę.

+1

Należy zauważyć, że w tym przypadku domyślna podstawa to 8, ponieważ ciąg zaczyna się od '0'. –

2

Spowoduje to utworzenie bufora heksadecymalnego i przekształcenie go na łańcuch binarny i powrót do heksu bufora.

UWAGA: kiedy mówię o heksie bufora, mam na myśli wartość dziesiętną, ponieważ po przejściu przez bufor i wyciągnięciu każdego elementu z tablicy, podaje on wartość dziesiętną (np .: 210, zamiast d2).

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

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

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

potrzebna do zapoznania się z buforami

Będziesz iteracyjne nad buforze o for(){} a wewnątrz można zrobić coś takiego:

(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'

Oczywiście, zamiast używać "(210).toString(2)" TOBIE pętli, należy użyć "(buffer[i]).toString(2)"

Endian Rep jest zależy od Ciebie! :) (array.reverse())

Mam nadzieję, że to pomoże!

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

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

Powiązane problemy