基数を指定して文字列を数値化するには、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
は大文字小文字が混在していても数値化することができます。
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
|