変換する適切な方法は何であるcharにはint?これにより49:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
文字列に変換して解析したくありません。
変換する適切な方法は何であるcharにはint?これにより49:
int val = Convert.ToInt32('1');
//int val = Int32.Parse("1"); // Works
文字列に変換して解析したくありません。
回答:
誰もが、組み込みの静的メソッドについて言及していないことに驚いていSystem.Charます...
int val = (int)Char.GetNumericValue('8');
// val == 8
doubleしかし、それがを返すのは非常に奇妙です
Char.GetNumericValue('⅓')確かに戻り0.3333...ます。指摘してくれてありがとう!
どの程度(のためchar c)
int i = (int)(c - '0');
char値の減算はどれですか?
APIの質問(コメント)について、おそらく拡張メソッドですか?
public static class CharExtensions {
public static int ParseInt32(this char value) {
int i = (int)(value - '0');
if (i < 0 || i > 9) throw new ArgumentOutOfRangeException("value");
return i;
}
}
次に使用します int x = c.ParseInt32();
int.Parse、すなわち例外は、無効な入力にスローされることは、追加の境界チェックを追加する必要があります:if (i < 0 || i > 9) throw new FormatException();
次の拡張メソッドを使用できます。
public static class CharExtensions
{
public static int CharToInt(this char c)
{
if (c < '0' || c > '9')
throw new ArgumentException("The character should be a number", "c");
return c - '0';
}
}
charにint我々の入力パラメータではなく、出力の範囲をチェックしなければならないint値を。
int数値文字の範囲はメソッドの開始時に実行されたため、結果値を確認する必要はありません。したがって、指定された文字が数値文字の範囲内にない場合、例外がスローされます。指定したものと同じロジックですが、メソッドの最初に範囲チェックが実行されます。
if (c < 0 || c > 9)...
これを実現する最も安全な方法は、Int32.TryParseメソッドを使用することです。こちらをご覧ください:http : //dotnetperls.com/int-tryparse
int val = '1' & 15;
ASCII文字0〜9のバイナリは次のとおりです。
0〜00110000
1-00110001
2-00110010
3-00110011
4-00110100
5-00110101
6-00110110
7-00110111
8-00111000
9-00111001
そして、それらのそれぞれの最初の4 LSBを取り込む場合(ビット単位のANDを使用し、15に等しい8'b00001111を使用)、実際の数を取得します(0000 = 0,0001 = 1,0010 = 2、...)
16進数表現をカバーする他のいくつかの回答の拡張:
public int CharToInt(char c)
{
if (c >= '0' && c <= '9')
{
return c - '0';
}
else if (c >= 'a' && c <= 'f')
{
return 10 + c - 'a';
}
else if (c >= 'A' && c <= 'F')
{
return 10 + c - 'A';
}
return -1;
}