Answers:
有趣的答案,但是文档说的不同:
使用这些
GetNumericValue
方法将Char
代表数字的对象转换为数值类型。使用Parse
和TryParse
将字符串中的字符转换为Char
对象。使用ToString
一个转换Char
对象的String
对象。
char.GetNumericValue('¼')
产生0.25。Unicode的乐趣... ;-)
char
到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'
从char中减去更好。
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
'9'
,但您的代码包含9
,无法编译。
真正的方法是:
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(使用按位与且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字符一起使用
我看到了很多答案,但它们似乎使我感到困惑。我们不能仅仅使用类型转换。
例如:
int s;
char i= '2';
s = (int) i;