質問
C#に文字があります:
char foo = '2';
今、2をintにしたいです。 Convert.ToInt32は、数値2ではなく、文字の実際の10進値を返すことがわかりました。次のように動作します。
int bar = Convert.ToInt32(new string(foo, 1));
int.parseは、文字列でも機能します。
C#には、文字列にせずにcharからintに移動するネイティブ関数はありませんか?これは取るに足らないことはわかっていますが、変換を直接行うためのネイティブが存在しないことは奇妙に思えます。
解決
興味深い答えですが、ドキュメントの言い方は異なります:
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" -charを変換するint。
" 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(<*>quot;{c & 15}"); // 10
Debug.Print(<*>quot;{c ^ 48}"); // 58
Debug.Print(<*>quot;{c - 48}"); // -38
Debug.Print(<*>quot;{(uint)c - 48}"); // 4294967258
Debug.Print(<*>quot;{char.GetNumericValue(c)}"); // -1
Compact Framework 3.5を使用していますが、&quot; char.Parse&quot;がありません。方法。 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文字で動作します
@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();
私は多くの答えを見てきましたが、それらは私を混乱させているようです。単純に型キャストを使用することはできません。
例:-
int s;
char i= '2';
s = (int) i;
これは私のために働いた:
int bar = int.Parse("" + foo);