基数を指定して文字列を数値化するには、Convert.ToInt32等のメソッドを使用することができます。 引数fromBaseに基数を指定すると、その基数で表記されている数値として文字列を数値化することができます。 基数には2, 8, 10, 16のいずれかを指定できます。
基数が10の場合において、例えば文字列2147483648
をToInt32メソッドで変換する場合は、値が型(Int32)の扱える範囲を超えるため、例外OverflowExceptionがスローされます。 一方、基数が10以外の場合、文字列はその型におけるメモリ上での表現であるものとして変換されます。 そのため、例えば文字列80000000
を基数16としてToInt32メソッドで数値に変換する場合は、オーバーフローとはならず、値-2147483648として変換されます。 ただしこの場合でも、値が型の扱える範囲を超えるような場合はOverflowExceptionがスローされます。
基数が10の場合に限り、符号+
および-
が前置された文字列の場合でも例外はスローされません。 それ以外の基数で符号が前置されている場合は、FormatExceptionとなります。 0埋めされた文字列(数値に桁揃えの0が先行する)場合でも、そのまま変換できます。 一方、前後に空白等が含まれる場合はFormatExceptionとなります。
このほか、0x
や&H
などのプレフィックスや、UL
などのサフィックスが含まれる文字列を数値化することはできません。 この場合FormatExceptionがスローされます。 また、桁区切り記号_
を含む文字列の場合も同様です。 プレフィックス・サフィックス・桁区切り文字が含まれる文字列を数値化したい場合は、事前に取り除いておく必要があります。
16進表記の場合はa
〜f
およびA
〜F
は大文字小文字が混在していても数値化することができます。
Imports System
Module Sample
Sub Main()
Dim s As String = "100"
Console.WriteLine($"s = ""{s}""")
Console.WriteLine("base = 2 : {0}", Convert.ToInt32(s, 2)) ' 文字列を 2進数形式の数値としてIntegerに変換する
Console.WriteLine("base = 10 : {0}", Convert.ToInt32(s, 10)) ' 文字列を10進数形式の数値としてIntegerに変換する
Console.WriteLine("base = 16 : {0}", Convert.ToInt32(s, 16)) ' 文字列を16進数形式の数値としてIntegerに変換する
Console.WriteLine()
' 基数16で変換する場合は、大文字小文字が混在していても問題なく変換される
s = "cafe" : Console.WriteLine("s = ""{0}"", base = 16 : {1}", s, Convert.ToInt32(s, 16))
s = "CaFe" : Console.WriteLine("s = ""{0}"", base = 16 : {1}", s, Convert.ToInt32(s, 16))
' 基数10以外で変換する場合は、変換先の型におけるメモリ上での表現として解釈される
' (解釈の結果、型の扱える範囲を超える場合はOverflowExceptionとなる)
s = "80000000" : Console.WriteLine("s = ""{0}"", base = 16 : {1}", s, Convert.ToInt32(s, 16))
' 基数10で変換する場合は、符号が前置されていても問題なく変換される
' (基数10以外では、FormatExceptionとなる)
s = "+100" : Console.WriteLine("s = ""{0}"", base = 10 : {1}", s, Convert.ToInt32(s, 10))
s = "-100" : Console.WriteLine("s = ""{0}"", base = 10 : {1}", s, Convert.ToInt32(s, 10))
' 0埋めされている場合でも、問題なく変換される
s = "010" : Console.WriteLine("s = ""{0}"", base = 16 : {1}", s, Convert.ToInt32(s, 16))
s = "010" : Console.WriteLine("s = ""{0}"", base = 10 : {1}", s, Convert.ToInt32(s, 10))
' 前後に空白がある場合はFormatExceptionとなるので、Trim()メソッドであらかじめ除去しておく必要がある
s = " 1 " : Console.WriteLine("s = ""{0}"", base = 16 : {1}", s, Convert.ToInt32(s.Trim(), 16))
s = " 1 " : Console.WriteLine("s = ""{0}"", base = 10 : {1}", s, Convert.ToInt32(s.Trim(), 10))
End Sub
End Module
s = "100" base = 2 : 4 base = 10 : 100 base = 16 : 256 s = "cafe", base = 16 : 51966 s = "CaFe", base = 16 : 51966 s = "80000000", base = 16 : -2147483648 s = "+100", base = 10 : 100 s = "-100", base = 10 : -100 s = "010", base = 16 : 16 s = "010", base = 10 : 10 s = " 1 ", base = 16 : 1 s = " 1 ", base = 10 : 1
Convert.ToInt32メソッドは文字列をint
/Integer
に変換します。 このほかにも、変換先・値の型に合わせて以下のメソッドを使用することができます。
メソッド | 変換先の型 | |
---|---|---|
C# | VB | |
Convert.ToSByte |
sbyte
|
SByte
|
Convert.ToByte |
byte
|
Byte
|
Convert.ToInt16 |
short
|
Short
|
Convert.ToUInt16 |
ushort
|
UShort
|
Convert.ToInt32 |
int
|
Integer
|
Convert.ToUInt32 |
uint
|
UInteger
|
Convert.ToInt64 |
long
|
Long
|
Convert.ToUInt64 |
ulong
|
ULong
|