この記事では、初心者向けに16進数と2進数の文字列を相互に変換する方法を紹介します。
具体的には、16進数から2進数への変換方法と、2進数から16進数への変換方法について解説します。
strtol関数
を使う方法と自作する方法の2つの手法を紹介するので、プログラミング初心者の方でも簡単に理解できる内容です。
16進数から2進数への変換方法
16進数と2進数は、コンピュータ内部でデータを表現するためによく使用される数値の表現方法です。
16進数は0から9までの数字とAからFまでのアルファベットを使用し、2進数は0と1のみを使用します。
この記事では、16進数から2進数への変換方法について説明します。
strtol関数を使う方法
C言語には、文字列を数値に変換するための便利な関数が用意されています。
その中でも、16進数の文字列を2進数の数値に変換するためには、strtol関数
を使用することができます。
以下に、strtol関数
を使って16進数の文字列を2進数の数値に変換するサンプルコードを示します。
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char hexString[] = "1A"; // 16進数の文字列
long decimal = strtol(hexString, NULL, 16); // 16進数の文字列を10進数の数値に変換
// 10進数の数値を2進数の文字列に変換
char binaryString[33]; // 32ビットの2進数の文字列を格納するための配列
itoa(decimal, binaryString, 2);
printf("16進数: %s\n", hexString);
printf("2進数: %s\n", binaryString);
return 0;
}
上記のコードでは、strtol
関数を使用して16進数の文字列を10進数の数値に変換しています。
そして、itoa
関数を使用して10進数の数値を2進数の文字列に変換しています。
最終的に、変換結果を出力しています。
実行結果は以下のようになります。
16進数: 1A
2進数: 11010
自作する方法
strtol関数
を使用せずに、自分で16進数から2進数への変換を行うこともできます。
以下に、自作の関数を使用して16進数の文字列を2進数の文字列に変換するサンプルコードを示します。
#include <stdio.h>
// 16進数の文字を2進数の文字列に変換する関数
void hexToBinary(char hex, char* binary) {
switch (hex) {
case '0':
strcpy(binary, "0000");
break;
case '1':
strcpy(binary, "0001");
break;
case '2':
strcpy(binary, "0010");
break;
case '3':
strcpy(binary, "0011");
break;
case '4':
strcpy(binary, "0100");
break;
case '5':
strcpy(binary, "0101");
break;
case '6':
strcpy(binary, "0110");
break;
case '7':
strcpy(binary, "0111");
break;
case '8':
strcpy(binary, "1000");
break;
case '9':
strcpy(binary, "1001");
break;
case 'A':
case 'a':
strcpy(binary, "1010");
break;
case 'B':
case 'b':
strcpy(binary, "1011");
break;
case 'C':
case 'c':
strcpy(binary, "1100");
break;
case 'D':
case 'd':
strcpy(binary, "1101");
break;
case 'E':
case 'e':
strcpy(binary, "1110");
break;
case 'F':
case 'f':
strcpy(binary, "1111");
break;
default:
strcpy(binary, "");
break;
}
}
int main() {
char hexString[] = "1A"; // 16進数の文字列
char binaryString[33] = ""; // 32ビットの2進数の文字列を格納するための配列
// 16進数の文字列を2進数の文字列に変換
for (int i = 0; i < strlen(hexString); i++) {
char binary[5] = ""; // 4ビットの2進数の文字列を格納するための配列
hexToBinary(hexString[i], binary);
strcat(binaryString, binary);
}
printf("16進数: %s\n", hexString);
printf("2進数: %s\n", binaryString);
return 0;
}
上記のコードでは、hexToBinary
関数を使用して16進数の文字を2進数の文字列に変換しています。
そして、16進数の文字列を1文字ずつ変換し、2進数の文字列に連結しています。
最終的に、変換結果を出力しています。
実行結果は以下のようになります。
16進数: 1A
2進数: 00011010
以上が、16進数から2進数への変換方法についての説明です。
strtol関数
を使用する方法と自作する方法の2つの方法を紹介しました。
どちらの方法も使いやすいので、状況に応じて適切な方法を選んでください。