【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文字ずつ走査していきます。処理の流れは以下のとおりです。
- 走査した文字(例:A)を取り出します。
- その文字を対応する10進数の値に変換し、変数xに格納します。
- dec = dec + x × 16y を計算します。
- y に 1 を加算します。
- すべての文字の処理が完了したら、dec を返します。
なお、16進数の値を左から右へ走査することも可能です。その場合は、y を N - 1(N は16進数の文字列の長さ)で初期化し、ループの反復ごとに y を減算していきます。
このように、各桁の文字を数値に変換して16のべき乗を掛けるというシンプルな仕組みで、16進数から整数値への変換を実現できます。
-
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を割り、商を求め
-
Pythonで整数を16進数の文字列に変換する方法を解説
Pythonで整数を16進文字列に変換する基本の方法Pythonでは、組み込み関数 hex() を使うことで、任意の整数を簡単に16進数表記の文字列へ変換できます。変換結果には自動的に「0x」というプレフィックスが付きます。>>> hex(100) 0x64 >>> hex(4095) 0xfff >>> hex(31) 0x1fhex()関数のポイントhex() 関数は引数として整数(int型)を受け取り、16進数を表す文字列(str型)を返します。負の整数を渡した場合は、マイナス記号が付いた形式で出力されます。>>>