JavaScriptで符号なし32ビット整数をIPv4アドレスに変換する方法
問題
まず、次のようなIPv4アドレスを例に考えてみましょう。
128.32.10.1
このアドレスを2進数に変換すると、以下のようになります。
10000000.00100000.00001010.00000001
さらに、この2進数を符号なし32ビットの10進数として表すと、次の値になります。
2149583361
つまり、10進数「2149583361」に対応するIPv4アドレスは「128.32.10.1」であると言えます。
今回の課題は、32ビット符号なし整数を受け取り、それに対応するIPv4アドレスを返すJavaScript関数を作成することです。
解決策
コード例
以下がその実装例です。
const num = 2149583361;
const int32ToIp = (num) => {
return (num >>> 24 & 0xFF) + '.' +
(num >>> 16 & 0xFF) + '.' +
(num >>> 8 & 0xFF) + '.' +
(num & 0xFF);
};
console.log(int32ToIp(num));出力結果
コンソールには以下のように表示されます。
128.32.10.1
コードの仕組み
この関数では、符号なし右シフト演算子「>>>」を使用して、数値を8ビットずつ右にシフトしながら、IPv4アドレスを構成する4つのオクテット(各8ビット=0〜255の範囲の数値)を順番に取り出しています。
- num >>> 24:上位8ビット(第1オクテット)を取り出します。
- num >>> 16:第2オクテットを取り出します。
- num >>> 8:第3オクテットを取り出します。
- num:そのまま下位8ビット(第4オクテット)を扱います。
各ステップで「& 0xFF」によるAND演算を行うことで、下位8ビット以外の余分なビットを切り捨て、必ず0〜255の範囲の値になるようにしています。最後に、取り出した4つの数値をドット(.)で連結し、IPv4アドレス形式の文字列として返します。
なお、「>>>」ではなく通常の右シフト演算子「>>」を使うと、符号ビットの影響を受けて負の数に対して正しく動作しない可能性があるため、32ビット符号なし整数を扱う場合は「>>>」を使用するのが安全です。
-
JavaScriptで10進数を2進数に変換する方法をわかりやすく解説
JavaScriptで10進数を2進数に変換したい場合は、NumberオブジェクトのtoString()メソッドを使うのが最もシンプルで一般的な方法です。基数として「2」を指定するだけで、数値を簡単に2進数の文字列に変換できます。基本的な使い方:toString(2)toString(2)と記述することで、10進数の数値を2進数表現の文字列に変換できます。以下がそのサンプルコードです。<!DOCTYPE html> <html> <body> <script> &n
-
JavaScriptで配列をSet(セット)に変換する方法
JavaScriptで配列をSetに変換するときの基本JavaScriptでは、Setオブジェクトを使うことで、配列から重複しない一意の値だけを持つコレクションを簡単に作成できます。SetはES6(ECMAScript 2015)で導入された組み込みオブジェクトで、同じ値が複数回追加されても自動的に1つにまとめられるのが特徴です。変換自体は非常にシンプルで、new Set(配列)と書くだけで完了します。コード例:配列からSetへの変換以下は、重複を含む配列をSetに変換して画面に表示するサンプルコードです。<!DOCTYPE html> <html lang=ja> &