我在c#中有一个char:
char foo = '2';
现在我想把2变成一个整型。我发现皈依。ToInt32返回该字符的实际十进制值,而不是数字2。以下是可行的方法:
int bar = Convert.ToInt32(new string(foo, 1));
int。解析也只适用于字符串。
c#中没有本地函数可以在不使其成为字符串的情况下从char转换为int吗?我知道这是微不足道的,但这似乎很奇怪,没有本地直接进行转换。
我在c#中有一个char:
char foo = '2';
现在我想把2变成一个整型。我发现皈依。ToInt32返回该字符的实际十进制值,而不是数字2。以下是可行的方法:
int bar = Convert.ToInt32(new string(foo, 1));
int。解析也只适用于字符串。
c#中没有本地函数可以在不使其成为字符串的情况下从char转换为int吗?我知道这是微不足道的,但这似乎很奇怪,没有本地直接进行转换。
当前回答
这将转换为整数并处理unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
你可以在这里阅读更多。
其他回答
原则:
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;
}
当字符不是ASCII数字时,基于结果的一些方法的比较:
char c1 = (char)('0' - 1), c2 = (char)('9' + 1);
Debug.Print($"{c1 & 15}, {c2 & 15}"); // 15, 10
Debug.Print($"{c1 ^ '0'}, {c2 ^ '0'}"); // 31, 10
Debug.Print($"{c1 - '0'}, {c2 - '0'}"); // -1, 10
Debug.Print($"{(uint)c1 - '0'}, {(uint)c2 - '0'}"); // 4294967295, 10
Debug.Print($"{char.GetNumericValue(c1)}, {char.GetNumericValue(c2)}"); // -1, -1
使用Uri.FromHex。 为了避免异常Uri.IsHexDigit。
char testChar = 'e';
int result = Uri.IsHexDigit(testChar)
? Uri.FromHex(testChar)
: -1;
我同意@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();
这将转换为整数并处理unicode
CharUnicodeInfo.GetDecimalDigitValue('2')
你可以在这里阅读更多。