【C言語】16進数と2進数の文字列を相互に変換する方法

この記事では、初心者向けに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つの方法を紹介しました。

どちらの方法も使いやすいので、状況に応じて適切な方法を選んでください。

1 2
目次から探す