.NET TIPS

数値←→3〜36進数文字列を相互に変換するには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2010/01/14

 .NET Frameworkでは、数値を2/8/10/16進数文字列に変換するためのConvert.ToStringメソッド(=System名前空間のConvertクラスの静的メソッドToString)が用意されている。また、逆に2/8/10/16進数文字列を数値に変換するためのConvert.ToInt32メソッド(=System名前空間のConvertクラスの静的メソッドToInt32)なども用意されている。

 詳しくは「TIPS:2進数文字列と16進数文字列を相互に変換するには?」を参照してほしいが、これらのメソッドの第2パラメータには基数として2/8/10/16は指定できるが、それ以外の基数が設定できない。要するに.NET Frameworkでは、これらの基数を除く、3〜36進数の数値と文字列の相互変換を行う機能が提供されていない(※なお、36までにしている理由は、0〜9、A〜Zの全36文字で表現可能な最大の基数だからである)。

 そこで本稿では、数値←→3〜36進数文字列を相互に変換するRadixConvertクラスを提供し、その使い方を説明する。RadixConvertクラスは下記のリンクからダウンロードできる。

●n進数の数値と文字列の相互変換を行うRadixConvertクラスの使い方

 RadixConvertクラスの基本的な使い方は、前述のConvert.ToStringメソッドおよびConvert.ToInt32メソッドとほぼ同じである。具体的には下記のメソッドが提供されている。

RadixConvert.ToInt16メソッド
RadixConvert.ToUInt16メソッド
RadixConvert.ToInt32メソッド
RadixConvert.ToUInt32メソッド
RadixConvert.ToInt64メソッド
RadixConvert.ToUInt64メソッド
RadixConvert.ToDecimalメソッド

・第1パラメータ(String型):n進数の文字列。
・第2パラメータ(Int32型):基数。
・戻り値(Int16/UInt16/Int32/UInt32/Int64/UInt64/Decimal型):いずれかの型の数値。

RadixConvert.ToStringメソッド

・第1パラメータ(Int16/UInt16/Int32/UInt32/Int64/UInt64/Decimal型):いずれかの型の数値。
・第2パラメータ(Int32型):基数。
・第3パラメータ(Boolean型):11進数以降での表現文字“A”〜“Z”を大文字にする場合はtrue、小文字にする場合はfalseを指定する。
・戻り値(String型):n進数の文字列。

 いずれも第2パラメータの基数に指定できるのは「3」〜「36」で、2/8/10/16を指定するとエラーになる。これらの進数を扱いたい場合は、前述のConvertクラスを利用してほしい。

 次のコードは、RadixConvertクラスの利用例である。

using System;

class Program
{
  static void Main()
  {
    // 36進数の数値文字列をUInt32型の数値に変換します
    uint test1 = RadixConvert.ToUInt32("ZA90", 36);
    Console.WriteLine(
      "36進数の数値文字列「ZA90」を数値にすると:" +
      test1.ToString());

    // 36進数の数値文字列をUInt32型の数値に変換します
    string test2 = RadixConvert.ToString(300, 36, true);
    Console.WriteLine(
      "数値「300」は36進数の数値文字列にすると:" + test2 +
      "(けた数:" + test2.Length + ")");

    // 実行例:
    // 36進数の数値文字列「ZA90」を数値にすると:1646244
    // 数値「300」は36進数の数値文字列にすると:8C(けた数:2)

    // 実行内容を確認するために停止
    Console.ReadLine();
  }
}
Imports System

Module Module1

  Sub Main()
    ' 36進数の数値文字列をUInt32型の数値に変換します
    Dim test1 As UInteger = RadixConvert.ToUInt32("ZA90", 36)
    Console.WriteLine( _
      "36進数の数値文字列「ZA90」を数値にすると:" & _
      test1.ToString())

    ' 36進数の数値文字列をUInt32型の数値に変換します
    Dim test2 As String = RadixConvert.ToString(300, 36, True)
    Console.WriteLine( _
      "数値「300」は36進数の数値文字列にすると:" & test2 & _
      "(けた数:" & test2.Length & ")")

    ' 実行例:
    ' 36進数の数値文字列「ZA90」を数値にすると:1646244
    ' 数値「300」は36進数の数値文字列にすると:8C(けた数:2)

    ' 実行内容を確認するために停止
    Console.ReadLine()
  End Sub

End Module
RadixConvertクラスの利用例(上:C#、下:VB)

 RadixConvert.ToUInt32メソッドなどの第1パラメータに指定するn進数文字列には、スペースなどのn進数文字列を構成する文字以外のものが含まれているとエラーになるので注意してほしい。End of Article

カテゴリ:クラス・ライブラリ 処理対象:文字列
使用ライブラリ:Convertクラス(System名前空間)
関連TIPS:2進数文字列と16進数文字列を相互に変換するには?

この記事と関連性の高い別の.NET TIPS
2進数文字列と16進数文字列を相互に変換するには?
バイト列と数値を変換するには?
文字列を数値に変換するには?
文字と文字列を変換するには?
文字列をシフトJISとしてバイト列に変換するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間