JavaScript - преобразовать четырехсимвольный массив в целое число - PullRequest
1 голос
/ 11 января 2011

Как я могу преобразовать четырехсимвольный массив в целое число?

Ответы [ 4 ]

3 голосов
/ 11 января 2011

Вы пытаетесь превратить эти символы в коды символов ASCII и используете эти коды в качестве значений байтов.Это можно сделать с помощью charCodeAt.Например:

var str = "x7={";
var result = ( str.charCodeAt(0) << 24 )
           + ( str.charCodeAt(1) << 16 )
           + ( str.charCodeAt(2) << 8 )
           + ( str.charCodeAt(3) );

Возвращает 2016886139, как и ожидалось.

Однако имейте в виду, что в отличие от C ++, JavaScript не обязательно будет использовать однобайтовый набор из 256 символов.Например, '€'.charCodeAt(0) возвращает 8364, что намного превышает максимум 256, который допускает ваша эквивалентная программа C ++.Таким образом, любой символ за пределами диапазона 0–255 приведет к тому, что приведенный выше код будет вести себя некорректно.

Используя Unicode, вы можете вместо этого представлять «" 㵻 ».

2 голосов
/ 11 января 2011
var arr = [5,2,4,0],
    foo = +arr.join('');

console.log(foo, typeof foo);
0 голосов
/ 11 января 2011
var chArr = ['1','2','3','4'];
var num = parseInt( chArr.join(''), 10);

или

var num = parseInt( chArr.reverse().join(''), 10);

, если в зависимости от порядка заполнения массива ..

0 голосов
/ 11 января 2011

Полагаю, это зависит от того, как вы хотите отобразить символьные значения в биты целого числа.

Одно прямое решение будет:

var myArray = ['1', '2', '3', '4']
var myInt = (myArray[0].charCodeAt(0) << 24) | (myArray[1].charCodeAt(0) << 16) | (myArray[2].charCodeAt(0) << 8) | myArray[3].charCodeAt(0);

Это дает целое число 0x01020304.При этом используются целые числа во входном массиве, для символов результат может отличаться в зависимости от используемых символов.

Обновление: используйте charCodeAt() для преобразования символов в кодовые точки.

...