はじめに
RGBのカラーコードを10進数から16進数に変換する処理など、業務で稀に基数変換の処理を書くことがありますが、稀にしか使わない処理なのでいざ使う時には書き方をすっかり忘れてしまっています。
そこで以下の記事と同じ要領で、様々な言語で基数変換をする処理をまとめてみました。
学習環境
- 今回はpaiza.ioのC言語のエディタを使いました。
C言語
- 基数変換する関数が無いらしいので、10進数→N進数に変換するための処理を自作しました。
- 以下のコードは、
radix
の値を変更することでN進数に変換できますが、対応しているのは10進数以下となります。 - @SaitoAtsushi さん、ご指摘ありがとうございました。
- 以下のコードは、
10進数→N進数の変換
#include <stdio.h>
// 変換後の基数
const int radix = 2;
int main(void){
int decimalNumber = 100;
printf("10進数の値: %d\n", decimalNumber);
int converted = 0; // 変換後の値
int base = 1;
while (decimalNumber>0) {
int mod = decimalNumber % radix;
converted = converted + (mod * base);
decimalNumber = decimalNumber / radix;
base = base * 10;
}
printf("10進数->%d進数に変換: %d\n", radix, converted);
}
実行結果(10進数→N進数の変換)
10進数の値: 100
10進数->2進数に変換: 1100100
- N進数→10進数の変換については、
strtol
関数を使うと36進数以下であれば変換できるようです。- @SaitoAtsushi さん、ご教示頂きありがとうございました。
N進数→10進数の変換
#include <stdio.h>
#include <stdlib.h>
// 変換後の基数
const int radix = 16;
int main(void){
const char* decimalNumber = "FF";
long converted = strtol(decimalNumber, NULL, radix);
printf("%d進数の%sを10進数で表すと: %d\n", radix, decimalNumber, converted);
}
実行結果(2進数→10進数の変換)
16進数のFFを10進数で表すと: 255
C#
- 10進数→N進数の変換は、
Convert.ToString(元の値, 変更後の基数)
で簡単に基数変換できます。
10進数→N進数の変換
using System;
public class Hello{
public static void Main(){
int decimalNumber = 100;
System.Console.WriteLine("10進数の値: " + decimalNumber);
System.Console.WriteLine("10進数->2進数に変換: " + Convert.ToString(decimalNumber, 2));
System.Console.WriteLine("10進数->8進数に変換: " + Convert.ToString(decimalNumber, 8));
System.Console.WriteLine("10進数->16進数に変換: " + Convert.ToString(decimalNumber, 16));
}
}
実行結果(10進数→N進数の変換)
10進数の値: 100
10進数->2進数に変換: 1100100
10進数->8進数に変換: 144
10進数->16進数に変換: 64
- N進数→10進数の変換は、
Convert.ToInt32(元の値, 変更後の基数)
で簡単に基数変換できます。
N進数→10進数の変換
using System;
public class Hello{
public static void Main(){
System.Console.WriteLine("2進数->10進数に変換: " + Convert.ToInt32("1100100", 2));
System.Console.WriteLine("8進数->10進数に変換: " + Convert.ToInt32("144", 8));
System.Console.WriteLine("16進数->10進数に変換: " + Convert.ToInt32("64", 16));
}
}
実行結果(N進数→10進数の変換)
2進数->10進数に変換: 100
8進数->10進数に変換: 100
16進数->10進数に変換: 100
Java
- 10進数→N進数の変換はC#と似ていますが、ConvertクラスではなくIntegerクラスのtoStringメソッドを使います。
10進数→N進数の変換
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
int decimalValue = 100;
System.out.println("10進数の値: " + decimalValue);
System.out.println("10進数->2進数に変換: " + Integer.toString(decimalValue, 2));
System.out.println("10進数->8進数に変換: " + Integer.toString(decimalValue, 8));
System.out.println("10進数->16進数に変換: " + Integer.toString(decimalValue, 16));
}
}
実行結果(10進数→N進数の変換)
10進数の値: 100
10進数->2進数に変換: 1100100
10進数->8進数に変換: 144
10進数->16進数に変換: 64
- N進数→10進数の変換は、
Integer.parseInt(元の値, 変更後の基数)
で簡単に基数変換できます。
N進数→10進数の変換
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("2進数->10進数に変換: " + Integer.parseInt("1100100", 2));
System.out.println("8進数->10進数に変換: " + Integer.parseInt("144", 8));
System.out.println("16進数->10進数に変換: " + Integer.parseInt("64", 16));
}
}
Javascript
- 10進数→N進数の変換は
toString
メソッドを使います。- メソッド名はJavaと同じです。
10進数→N進数の変換
let decimalValue = 100;
console.log("10進数の値: " + decimalValue);
console.log("10進数->2進数に変換: " + decimalValue.toString(2));
console.log("10進数->8進数に変換: " + decimalValue.toString(8));
console.log("10進数->16進数に変換: " + decimalValue.toString(16));
実行結果(10進数→N進数の変換)
10進数の値: 100
10進数->2進数に変換: 1100100
10進数->8進数に変換: 144
10進数->16進数に変換: 64
- N進数→10進数の変換は、
parseInt(元の値, 変更後の基数)
で簡単に基数変換できます。- こちらもメソッド名はJavaと同じですね...
N進数→10進数の変換
console.log("2進数->10進数に変換: " + parseInt('1100100', 2));
console.log("8進数->10進数に変換: " + parseInt('144', 8));
console.log("16進数->10進数に変換: " + parseInt('64', 16));
実行結果(N進数→10進数の変換)
2進数->10進数に変換: 100
8進数->10進数に変換: 100
16進数->10進数に変換: 100
Ruby
- 10進数→N進数の変換は、
to_s(変換後の基数)
で変換できます。
10進数→N進数の変換
decimalValue = 100
puts "10進数->2進数に変換: " + decimalValue.to_s(2)
puts "10進数->8進数に変換: " + decimalValue.to_s(8)
puts "10進数->16進数に変換: " + decimalValue.to_s(16)
実行結果(10進数→N進数の変換)
10進数->2進数に変換: 1100100
10進数->8進数に変換: 144
10進数->16進数に変換: 64
- N進数→10進数の変換は、
to_i(変更後の基数)
で簡単に基数変換できます。
N進数→10進数の変換
puts "2進数->10進数に変換: " + ("1100100".to_i(2)).to_s
puts "8進数->10進数に変換: " + ("144".to_i(8)).to_s
puts "16進数->10進数に変換: " + ("64".to_i(16)).to_s
実行結果(N進数→10進数の変換)
2進数->10進数に変換: 100
8進数->10進数に変換: 100
16進数->10進数に変換: 100
MySQL
- MySQLで10進数→N進数の変換は、
BIN
OCT
HEX
という関数で簡単にできます。
10進数→N進数の変換
SELECT CONCAT('10進数->2進数に変換: ', BIN(100));
SELECT CONCAT('10進数->8進数に変換: ', OCT(100));
SELECT CONCAT('10進数->16進数に変換: ', HEX(100));
実行結果(10進数→N進数の変換)
CONCAT('10進数->2進数に変換: ', BIN(100))
10進数->2進数に変換: 1100100
CONCAT('10進数->8進数に変換: ', OCT(100))
10進数->8進数に変換: 144
CONCAT('10進数->16進数に変換: ', HEX(100))
10進数->16進数に変換: 64
- N進数→10進数への変換は、
CONV
関数を使います。-
CONV(変換する値, 変換前の基数, 変換後の基数)
という形で引数を設定します。
-
N進数→10進数の変換
SELECT CONCAT('2進数->10進数に変換: ', CONV(1100100, 2, 10));
SELECT CONCAT('8進数->10進数に変換: ', CONV('144', 8, 10));
SELECT CONCAT('16進数->10進数に変換: ', CONV('64', 16, 10));
実行結果(N進数→10進数の変換)
CONCAT('2進数->10進数に変換: ', CONV(1100100, 2, 10))
2進数->10進数に変換: 100
CONCAT('8進数->10進数に変換: ', CONV('144', 8, 10))
8進数->10進数に変換: 100
CONCAT('16進数->10進数に変換: ', CONV('64', 16, 10))
16進数->10進数に変換: 100