16進数を示す文字列を整数に変換する

"0xff" や "0x80" などの数値を 255 や 128 に変換するには、

int v = int.Parse( str, System.Globalization.NumberStyles.HexNumber );

または

int v = Convert.ToInt32( str, 16 );

を使います。前者は 0x というヘキサを示すプレフィクスがあると例外エラーを発生します。後者は 0x がついていても変換してくれます。

後者のほうが汎用性は高いと思いますが、謎のマジックナンバー '16' という数値がコードの中で浮いてしまうので、const int CONV_HEX = 16; などのように定数定義してあげたほう可読性が高くなると思います。

私はどっちかというと前者のほうが好きです。前者を使う場合は Replace( "0x", "" ); などを使って "0x" という部分文字列を削除してから int.Parse() に文字列を与えてください。

以下にコードを示します。

// 成功する, Success.
private void button10_Click( object sender, EventArgs e )
{

	int v;

	try
	{
		String str = "ff";
		v = int.Parse( str, System.Globalization.NumberStyles.HexNumber );
	}
	catch( Exception excp )
	{
		MessageBox.Show( excp.Message );
		return;
	}

	MessageBox.Show( v.ToString() );

}

// 失敗する, Error.
private void button11_Click( object sender, EventArgs e )
{

	int v;

	try
	{
		String str = "0xff";
		v = int.Parse( str, System.Globalization.NumberStyles.HexNumber );
	}
	catch( Exception excp )
	{
		MessageBox.Show( excp.Message );
		return;
	}

	MessageBox.Show( v.ToString() );

}

// 成功する, Success.
private void button20_Click( object sender, EventArgs e )
{

	int v;

	try
	{
		String str = "ff";

		// 第2引数は16進hexを示す.
		v = Convert.ToInt32( str, 16 );
	}
	catch( Exception excp )
	{
		MessageBox.Show( excp.Message );
		return;
	}

	MessageBox.Show( v.ToString() );

}

// 成功する, Success.
private void button21_Click( object sender, EventArgs e )
{

	int v;

	try
	{
		String str = "0xff";

		// 第2引数は16進hexを示す.
		v = Convert.ToInt32( str, 16 );
	}
	catch( Exception excp )
	{
		MessageBox.Show( excp.Message );
		return;
	}

	MessageBox.Show( v.ToString() );

}