0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

様々な言語で基数変換する(C,C#,Java,Javascript,Ruby,MySQL)

Last updated at Posted at 2023-04-22

はじめに

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

参考URL

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?