1

これを説明するのは難しいですが、最善を尽くします。

私はウェブサーバーでPLCを使用しており、PLCのレジスタからウェブページに値を書き込むために書いたいくつかのjavascriptコードを使用しています。

PLC が持つ機能の 1 つにタイム スケジュールがあります (たとえば、ライトをオンにする必要がある曜日と時間を選択できます)。スケジュールを設定するために、時間の入力ボックスをいくつか作成し、曜日ごとに 7 つのチェックボックスを作成しました。値を 10 進数でコントローラーに送信する必要がありますが、時間と分については問題ありません。

ただ、平日は2進数で表現しているのですが、コントローラーに10進数で書き込む必要があります。

7 つのチェックボックスがあり、それぞれが 2 進数を表しています (月曜日は 1、火曜日は 2、水曜日は 4、木曜日は 8 など)。どのチェックボックスがチェックされているかをまとめて、完了しました。

しかし、今は逆に必要です。今回は、コントローラーから 10 進数 (設定されている日を表す) を取得し、これをチェックボックスで表す必要があるため、おそらく 10 進数を 2 進数に変換しますが、どうすればリンクできますか?チェックボックスを個々の数字に?

誰かがこれを理解し、私を助けてくれることを願っています。

<input type="checkbox" id="mon"></td>
<input type="checkbox" id="tue"></td>
<input type="checkbox" id="wed"></td>
<input type="checkbox" id="thu"></td>
<input type="checkbox" id="fri"></td>
<input type="checkbox" id="sat"></td>
<input type="checkbox" id="sun"></td>

これらは私のチェックボックスであり、これは私のjavascriptの一部です:

var Weekday = 0;
if($('#mon').is(':checked')){ Weekday += 1 }  //this is code to create the decimal number 
if($('#tue').is(':checked')){ Weekday += 2 }
if($('#wed').is(':checked')){ Weekday += 4 }
if($('#thu').is(':checked')){ Weekday += 8 }
if($('#fri').is(':checked')){ Weekday += 16 }
if($('#sat').is(':checked')){ Weekday += 32 }
if($('#sun').is(':checked')){ Weekday += 64 }

これを逆にするにはどうすればよいですか?私は10進数を取得し、バイナリに変換する必要があり、javascriptを使用して、設定されているビットに応じて正しいチェックボックスをチェックします。

助言がありますか?

4

3 に答える 3

0
let yourNumber = 343234729;
let decomposed = yourNumber.toString(2).split('').reverse().map((bit, index) => bit === '1' ? 1 << index : 0).filter(x => x > 0);
于 2015-12-12T18:36:26.443 に答える