2016-08-10 1 views
0

Мне нужно проверить, является ли предоставленный параметр типом массива байтов или не используется Javascript. Как я могу это достичь? Пожалуйста посоветуй.Как проверить, является ли предоставленный параметр типом массива байтов в Javascript?

+0

Вы можете разместить пример допустимого массива и как его создать? – webdeb

+0

http://stackoverflow.com/questions/12332002/how-to-store-a-byte-array-in-javascript, вот как создать массив байтов на javascript, тогда вам просто нужно сравнить параметр с выбранным типа '' 'param instanceof UInt8Array''' –

+0

@MiguelLattuada это не всегда должен быть экземпляр ** UInt8Array **, это может быть также ** Int8Array ** или ** Uint8ClampedArray **, Я бы предложил проверить наличие 'byteLength' – webdeb

ответ

2

Потому что его непонятно, какой тип/экземпляр типизированного массива вы пытаетесь проверить, вот универсальная проверка. проверить, если byteLength присутствует, то он должен быть байт Массив

function isByteArray(array) { 
    if (array && array.byteLength !== undefined) return true; 
    return false; 
} 

Модифицированная версия Jonis Ответ: (это возвращает ArrayBuffer, который предназначен, чтобы содержать байт)

функция toUTF8Array (str) { var utf8 = новый ArrayBuffer (str.length);

for (var i=0; i < str.length; i++) { 
    var charcode = str.charCodeAt(i); 
    if (charcode < 0x80) { 
     utf8[i] = charcode; 
     continue; 
    } 

    if (charcode < 0x800) { 
     utf8[i] = (0xc0 | (charcode >> 6), 
        0x80 | (charcode & 0x3f)); 
     continue; 
    } 

    if (charcode < 0xd800 || charcode >= 0xe000) { 
     utf8[i] = (0xe0 | (charcode >> 12), 
        0x80 | ((charcode>>6) & 0x3f), 
        0x80 | (charcode & 0x3f)); 
     continue; 
    } 

    i++; 
    charcode = 0x10000 + (((charcode & 0x3ff)<<10) 
       | (str.charCodeAt(i) & 0x3ff)); 

    utf8[i - 1] = (0xf0 | (charcode >>18), 
       0x80 | ((charcode>>12) & 0x3f), 
       0x80 | ((charcode>>6) & 0x3f), 
       0x80 | (charcode & 0x3f)); 


    } 

    return utf8; 
} 
+0

. Я использовал ответ Joni в http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array для преобразования строка в байтовый массив и использовал ваш метод для его проверки. Но возвращает false. Есть идеи? :( – mayooran

+0

ну, это не типизированный массив, который предлагает Joni .. попробуйте изменить функцию Jonis, чтобы вернуть ArrayBuffer вместо простого массива. Конечно, вы можете установить для этого массива настраиваемое свойство, чтобы идентифицировать его позже, но то его все еще! == TypedArray – webdeb

+0

@mayooran см. правки, это вернет ArrayBuffer – webdeb

Смежные вопросы