回答:
興味深い答えですが、ドキュメントは別の言い方をしています:
GetNumericValue
メソッドを使用しChar
て、数値を表すオブジェクトを数値型に変換します。Parse
およびTryParse
を使用 して、文字列内の文字をChar
オブジェクトに変換します。 オブジェクトをオブジェクトToString
に変換するために使用します。Char
String
char.GetNumericValue('¼')
ます。Unicodeの喜び... ;-)
char
to int
を要求しstring
ます。
これはそれをintに変換します:
char foo = '2';
int bar = foo - '0';
これは、各文字が内部的に数字で表されるため機能します。文字「0」から「9」は連続した数字で表されるため、文字「0」と「2」の違いを見つけると数字の2になります。
char
です。常にUTF-16です。
誰かがこれを使用int.Parse()
してint.TryParse()
これを好きになることを検討しました
int bar = int.Parse(foo.ToString());
このようにさらに良い
int bar;
if (!int.TryParse(foo.ToString(), out bar))
{
//Do something to correct the problem
}
安全性が高く、エラーが発生しにくい
'0'
より優れていると考えられるのか理解できません。
実際の方法は次のとおりです。
int theNameOfYourInt =(int).Char.GetNumericValue(theNameOfYourChar);
"theNameOfYourInt"-charを変換するint。
「theNameOfYourChar」-intに変換されるように使用するChar。
他はすべてそのままにしておきます。
原理:
char foo = '2';
int bar = foo & 15;
ASCII文字0〜9のバイナリは次のとおりです。
0 - 0011 0000
1 - 0011 0001
2 - 0011 0010
3 - 0011 0011
4 - 0011 0100
5 - 0011 0101
6 - 0011 0110
7 - 0011 0111
8 - 0011 1000
9 - 0011 1001
そして、それらのそれぞれの最初の4 LSBを取り込む場合(ビット単位ANDを使用し、8'b00001111は15に等しい)、実際の数を取得します(0000 = 0,0001 = 1,0010 = 2、...)
使用法:
public static int CharToInt(char c)
{
return 0b0000_1111 & (byte) c;
}
@Chad Grantに同意します
また、文字列に変換すると、質問で述べたように、その値を数値として使用できます
int bar = Convert.ToInt32(new string(foo, 1)); // => gives bar=2
もっとシンプルでわかりやすい例を作ってみました
char v = '1';
int vv = (int)char.GetNumericValue(v);
char.GetNumericValue(v)はdoubleとして返され、(int)に変換されます
配列としての高度な使用法
int[] values = "41234".ToArray().Select(c=> (int)char.GetNumericValue(c)).ToArray();
Compact Framework 3.5を使用していますが、「char.Parse」メソッドがありません。Convertクラスを使用するのは悪くないと思います。(C#を介したCLR、Jeffrey Richterを参照)
char letterA = Convert.ToChar(65);
Console.WriteLine(letterA);
letterA = 'あ';
ushort valueA = Convert.ToUInt16(letterA);
Console.WriteLine(valueA);
char japaneseA = Convert.ToChar(valueA);
Console.WriteLine(japaneseA);
ASCII文字またはUnicode文字で動作します