C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でIPアドレスを16進数に変換するプログラム

本記事では、入力として与えられたIPアドレスの値を、対応する16進数表現に変換して表示するC++プログラムを紹介します。

IPアドレスとは

IPアドレス(Internet Protocol Address)とは、ネットワークに接続されたハードウェアを一意に識別するための番号です。「インターネット(Internet)」はネットワークを介した接続を意味し、「プロトコル(Protocol)」は通信時に守るべきルールや規則の集合を定義しています。このIPアドレスがあることで、システム同士がネットワーク上で互いに通信できるようになっています。

IPには主に以下の2つのバージョンが存在します。

  • IPv4(Internet Protocol Version 4)
  • IPv6(Internet Protocol Version 6)

IPアドレスは通常、次のようにピリオド区切りの数字の並びとして表現されます。

151.101.65.121

今回の変換処理では、インターネット関連の操作を行うために用意されたヘッダーファイル「arpa/inet.h」を使用します。このヘッダーには、ドット区切りのIPアドレス文字列を数値に変換するinet_addr()関数などが含まれています。

変換例

入力: 127.0.0.1
出力: 0x7f000001

入力: 172.31.0.2
出力: 0xac1f0002

アルゴリズム

処理の流れは以下のとおりです。

開始
Step1 → 文字列を反転する関数を定義
  void reverse(char* str)
   int len = 2 を設定
   int r = strlen(str) - 2 を設定
   While (len < r) の間ループ
    swap(str[len++], str[r++]) を呼び出す
    swap(str[len++], str[r]) を呼び出す
    r = r - 3 を設定
   終了
  終了
Step2 → IPアドレスを16進数に変換する関数を定義
  void convert(int ip_add)
   char str[15] を宣言
   sprintf(str, "0x%08x", ip_add) を呼び出す
   reverse(str) を呼び出す
   str を出力
Step3 → main() 内で
  int ip_add = inet_addr("127.0.0.1") を宣言
  convert(ip_add) を呼び出す
終了

C++での実装例

#include <arpa/inet.h>
#include <iostream>
#include <string.h>
using namespace std;

// 16進数文字列を反転する関数
void reverse(char* str) {
    int len = 2;
    int r = strlen(str) - 2;
    while (len < r) {
        swap(str[len++], str[r++]);
        swap(str[len++], str[r]);
        r = r - 3;
    }
}

// IPアドレスを16進数に変換する関数
void convert(int ip_add) {
    char str[15];
    sprintf(str, "0x%08x", ip_add);
    reverse(str);
    cout << str << "\n";
}

int main() {
    int ip_add = inet_addr("127.0.0.1");
    convert(ip_add);
    return 0;
}

実行結果

上記のコードを実行すると、次の出力が得られます。

0x7f000001

ポイント解説

  • inet_addr(): 「127.0.0.1」のようなドット区切りのIPアドレス文字列を、32ビットの整数値(ネットワークバイト順)に変換します。
  • sprintf(str, "0x%08x", ip_add): 整数値を8桁の16進数文字列に整形します。「%08x」により、桁数が足りない場合は先頭が0で埋められます。
  • reverse(): ネットワークバイト順とホストバイト順の違い(エンディアンの差)により生じるバイト列の並びを調整し、見慣れた「0x7f000001」のような形式に整える役割を担います。

  1. C++で10進数を16進数に変換するプログラムの作り方

    10進数の数値が入力として与えられたとき、その数値を16進数に変換するのが本記事の目的です。 コンピュータの世界では、16進数は基数16で表現され、10進数は基数10で表現されます。10進数は0〜9の値を使って表されるのに対し、16進数は0〜15の数字を持ちます。そのうち10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、15は「F」として表されます。 10進数から16進数への変換手順 10進数を16進数に変換するには、以下の手順に従います。 まず、与えられた数値を変換先の基数で割ります。たとえば、6789を16進数に変換する場合、基数である16で6789を割り、商を求め

  2. 摂氏を華氏に変換するC++プログラム

    この記事では、C++を使って摂氏(℃)の温度を華氏(℉)に変換するプログラムを紹介します。摂氏から華氏への変換は、次のシンプルな数式で行えます。 F = (9 × C ÷ 5) + 32 ここで、Cは摂氏温度、Fは華氏温度を表します。例えば、摂氏37度は華氏98.6度に相当し、これは人間の平熱に近い値です。 アルゴリズム 処理の流れは以下の通りです。 開始  摂氏温度Cを入力する  F = (9C/5) + 32 を計算する  結果Fを返す 終了 サンプルコード #include<iostream> using namespace std; int main() {