誰か私に少しアドバイスをください。
「01001011」などの文字列があり、それを元に戻す必要があるので、.split('')
よりも.reverse()
を使用し、配列を文字列として読み取る必要があります整数に変換します。出来ますか?
ありがとう
配列を文字列に戻す場合は、join()
( [〜#〜] mdn [〜#〜] )を使用し、文字列を整数に変換するにはparseInt()
( [〜#〜] mdn [〜#〜] )。後者の2番目の引数はオプションの基数です。
JavaScriptは、使用する基数を決定しようとしますが、必ず基数を手動で追加する必要があります。 MDNからの引用:
基数が未定義または0の場合、JavaScriptは次のことを想定しています。
入力文字列が「0x」または「0X」で始まる場合、基数は16(16進数)です。
入力文字列が「0」で始まる場合、基数は8(8進数)です。この機能は非標準であり、一部の実装では意図的にサポートしていません(代わりに基数10を使用)。このため、parseIntを使用するときは常に基数を指定します。
入力文字列が他の値で始まる場合、基数は10(10進数)です。
したがって、あなたの場合、次のコードが機能するはずです。
var a = '01001011';
var b = parseInt( a.split('').reverse().join(''), 2 );
または単に(反転せずに開始文字列を変換する場合):
var b = parseInt( a, 2 );
異なる基数でparseInt
を呼び出すだけです。この場合、バイナリに2を使用します。
var a = parseInt("01001011", 2);
// a === 75
parseInt
は、基数を明示的に指定しない場合、基数自体を把握しようとします。 Mozilla Developer Networkから :
基数が
undefined
または0の場合、JavaScriptは以下を想定します。
- 入力
string
が「0x」または「0X」で始まる場合、基数は16(16進数)です。- 入力
string
が「0」で始まる場合、基数は8(8進数)です。この機能は非標準であり、一部の実装では意図的にサポートしていません(代わりに基数10を使用)。このためparseInt
を使用する場合は常に基数を指定します。- 入力
string
が他の値で始まる場合、基数は10(10進数)です。
この場合、基数を指定することが重要です。そうしないと、10進数または8進数として解釈される可能性があります。経験則として、常に基数を指定します。
これは、バッファー16進数を取り、それをバイナリstrに変換し、バッファー16進数に戻します。
注:バッファーを16進数と言うときは、10進数の値を意味します。バッファーを反復処理して配列内の各項目をプルすると、10進数の値が得られるためです(例:d2ではなく210)。
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)
_」を使用する代わりに、「_(buffer[i]).toString(2)
_」を使用します
エンディアンの担当者はあなた次第です! :)(array.reverse())
お役に立てれば!
PS。 parseInt(('00000' + (210).toString(2).substring(5, 8)), 2); // 2
parseInt((210).toString(2).substring(5, 8), 2); // 2