文字列を数値に変換することは
割と良くあるけど微妙に忘れがちなので備忘の意味も込めて。
#16進数文字列の変換とか使うたびに調べているような…
#2進数/8進数/16進数の変換
個人的にはこれを良く使っている。
var binary = Convert.ToInt32("11", 2); // 2進数
var octal = Convert.ToInt32("11", 8); // 8進数
var hex = Convert.ToInt32("1a", 16); // 16進数
// 上から3, 9, 26になる
他にもNumberStylesを使う方法もあるのでそちらも記載。
var hex = int.Parse("1a", NumberStyles.HexNumber);
NumberStyles.HexNumberの部分は
AllowHexSpecifierを指定すれば16進数として扱ってくれるけど
前後に余分な空白があるとNGなので素直にHexNumberとしておくのが無難。
どちらの方法を使っても良いと思うけど
TryParseしたい時はNumberStylesを使う。
int hex;
if(false == int.TryParse( "xyz", System.Globalization.NumberStyles.HexNumber, null, out hex )
{
MessageBox.Show( "16進数に変換できないよ" );
}
#その他の変換
NumberStylesは指数とか3桁区切りになっている場合に変換出来るので知っておくと便利。
vat str = "123,456,789";
var num = int.Parse(str, System.Globalization.NumberStyles.AllowThousands);
// 123456789に変換される
str = "123e4";
num = int.Parse(str, System.Globalization.NumberStyles.AllowExponent);
// 1230000に変換される
但し桁区切り文字に関しては実行環境の設定に依存するので注意。
※[コントロールパネル]-[地域と言語]から『追加の設定』ボタンを押下すると表示される