web-dev-qa-db-ja.com

JavaScriptで数値のバイナリ表現を文字列から整数に変換する方法は?

誰か私に少しアドバイスをください。

「01001011」などの文字列があり、それを元に戻す必要があるので、.split('')よりも.reverse()を使用し、配列を文字列として読み取る必要があります整数に変換します。出来ますか?

ありがとう

31
david

配列を文字列に戻す場合は、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 );
49
Sirko

異なる基数で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進数として解釈される可能性があります。経験則として、常に基数を指定します。

15
Mattias Buelens

これは、バッファー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

2
Cody