2016-08-10 3 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

Typed-Arrayのタイプ/インスタンスを確認しようとしていないため、ここでユニバーサルチェックを行います。 (これはバイトを含むように設計されてArrayBufferを戻します)

機能toUTF8Array:バイト長が存在するかどうかを確認し、それはバイトアレイ

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

Jonis回答の修正バージョンであるべきです(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が提供している型付き配列ではありません。単純な配列の代わりにArrayBufferを返すようにJonis関数を修正しようとします。もちろん、この配列にカスタムプロパティを設定して後で識別できますそれでもまだ!== TypedArray – webdeb

+0

@mayooran編集内容を見ると、ArrayBuffer – webdeb

関連する問題