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」のような形式に整える役割を担います。
-
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を割り、商を求め
-
摂氏を華氏に変換する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() {