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

【C言語】16進数を整数値に変換する方法と仕組みをわかりやすく解説

問題

C言語を使って、16進数の値を整数値に変換するにはどうすればよいのでしょうか?

この記事では、変換の基本的な考え方と、実際に動作するサンプルプログラムを交えて解説します。

解決方法の基本概念

16進数は、0〜9の数字とA〜Fのアルファベット、合計16種類の記号で数値を表現します。A〜Fはそれぞれ、10進数の10〜15に対応しています。

16進数を10進数に変換するには、各桁の値に16のべき乗を掛けて足し合わせます。例えば、16進数の「A12」は次のように計算できます。

  • A × 16² = 10 × 256 = 2560
  • 1 × 16¹ = 1 × 16 = 16
  • 2 × 16⁰ = 2 × 1 = 2

これらを合計すると、2560 + 16 + 2 = 2578 となります。

サンプルプログラム

以下は、関数を使って16進数を整数に変換するC言語のプログラムです。

#include<stdio.h>
#include<string.h>
#include<math.h>
int hextodc(char *hex){
    int y = 0;
    int dec = 0;
    int x, i;
    for(i = strlen(hex) - 1; i >= 0; --i){
        if(hex[i] >= '0' && hex[i] <= '9'){
            x = hex[i] - '0';
        }
        else{
            x = hex[i] - 'A' + 10;
        }
        dec = dec + x * pow(16, y); // 16進数を整数値に変換
        ++y;
    }
    return dec;
}
int main(){
    char hex[100];
    printf("Enter Hexadecimal: ");
    scanf("%s", hex);
    printf("\nDecimal: %d", hextodc(hex));
    return 0;
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます。

1. Enter Hexadecimal: A
   Decimal: 10
2. Enter Hexadecimal: A12
   Decimal: 2578

処理の流れの解説

このプログラムでは、16進数の文字列を右から左へ1文字ずつ走査していきます。処理の流れは以下のとおりです。

  1. 走査した文字(例:A)を取り出します。
  2. その文字を対応する10進数の値に変換し、変数xに格納します。
  3. dec = dec + x × 16y を計算します。
  4. y に 1 を加算します。
  5. すべての文字の処理が完了したら、dec を返します。

なお、16進数の値を左から右へ走査することも可能です。その場合は、y を N - 1(N は16進数の文字列の長さ)で初期化し、ループの反復ごとに y を減算していきます。

このように、各桁の文字を数値に変換して16のべき乗を掛けるというシンプルな仕組みで、16進数から整数値への変換を実現できます。

  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. Pythonで整数を16進数の文字列に変換する方法を解説

    Pythonで整数を16進文字列に変換する基本の方法Pythonでは、組み込み関数 hex() を使うことで、任意の整数を簡単に16進数表記の文字列へ変換できます。変換結果には自動的に「0x」というプレフィックスが付きます。>>> hex(100) 0x64 >>> hex(4095) 0xfff >>> hex(31) 0x1fhex()関数のポイントhex() 関数は引数として整数(int型)を受け取り、16進数を表す文字列(str型)を返します。負の整数を渡した場合は、マイナス記号が付いた形式で出力されます。>>>