私はC#で文字を持っています:
char foo = '2';
次に、2をintにしたいです。 Convert.ToInt32は、数値2ではなく、文字の実際の10進値を返すことがわかりました。次のように動作します。
int bar = Convert.ToInt32(new string(foo, 1));
int.parseは、文字列でも機能します。
文字列にせずにcharからintに移動するネイティブ関数はC#にありませんか?私はこれが些細なことであることを知っていますが、変換を直接行うためのネイティブが何もないことは奇妙に思えます。
興味深い答えですが、ドキュメントの言い方は異なります:
GetNumericValue
メソッドを使用して、数値を表すChar
オブジェクトを数値型に変換します。Parse
およびTryParse
を使用して、文字列内の文字をChar
オブジェクトに変換します。ToString
を使用して、Char
オブジェクトをString
オブジェクトに変換します。
これにより、intに変換されます。
char foo = '2';
int bar = foo - '0';
これは、各文字が数字で内部的に表されるため機能します。文字「0」から「9」は連続した数字で表されるため、文字「0」と「2」の違いを見つけると数字2になります。
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
}
はるかに安全でエラーが発生しにくい
char c = '1';
int i = (int)(c-'0');
そして、そこから静的メソッドを作成できます:
static int ToInt(this char c)
{
return (int)(c - '0');
}
これを試して
char x = '9'; // '9' = ASCII 57
int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9
デフォルトでは、UNICODEを使用するので、faultyのメソッドを使用することをお勧めします
int bar = int.Parse(foo.ToString());
下の数値は数字と基本的なラテン文字で同じですが。
実際の方法は次のとおりです。
int theNameOfYourInt =(int).Char.GetNumericValue(theNameOfYourChar);
「theNameOfYourInt」-文字を変換する整数。
"theNameOfYourChar"-使用するCharで、intに変換されます。
他のすべてを残します。
原則:
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(15に等しい8'b00001111とのビット単位ANDを使用)を取得すると、実際の数(0000 = 0,0001 = 1,0010 = 2、...)を取得します
使用法:
public static int CharToInt(char c)
{
return 0b0000_1111 & (byte) c;
}
文字がASCII数字でない場合の結果に基づいたいくつかのメソッドの比較:
char c = '\n';
Debug.Print($"{c & 15}"); // 10
Debug.Print($"{c ^ 48}"); // 58
Debug.Print($"{c - 48}"); // -38
Debug.Print($"{(uint)c - 48}"); // 4294967258
Debug.Print($"{char.GetNumericValue(c)}"); // -1
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 charまたはUnicode charで動作します
@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();