当前位置:  开发笔记 > 编程语言 > 正文

在C#中将char转换为int

如何解决《在C#中将char转换为int》经验,为你挑选了6个好方法。

我在c#中有一个char:

char foo = '2';

现在我想把2变成一个int.我发现Convert.ToInt32返回char的实际十进制值而不是数字2.以下将起作用:

int bar = Convert.ToInt32(new string(foo, 1));

int.parse也适用于字符串.

C#中没有本地函数从char到int而不是字符串吗?我知道这是微不足道的,但似乎很奇怪,直接进行转换没有任何原生的东西.



1> Jeremy Ruten..:

这会将它转换为int:

char foo = '2';
int bar = foo - '0';

这是有效的,因为每个字符在内部由数字表示.字符"0"到"9"由连续数字表示,因此找到字符"0"和"2"之间的差异会得到数字2.


@EricSchaefer但是在C#中这是一个安全的假设:`char`总是UTF-16.
不,它没有,只要数字是有序的(编译器需要charset)它将工作,无论它们开始的价值.
Downvoting因为我只能看到机制,而不是意图.
它假定某个字符集.
不错的小小黑客!
这很好,除了你仍然需要先进行边界检查,此时我不确定int.parse(foo.ToString())是否更快.

2> Chad Grant..:

有趣的答案,但文档说不同:

使用这些GetNumericValue方法将Char表示数字的对象转换为数值类型.使用 ParseTryParse将字符串中的字符转换为Char 对象.使用ToString一个转换Char 对象的String对象.

http://msdn.microsoft.com/en-us/library/system.char.aspx


@KeithA:它有一个原因让它返回double:`char.GetNumericValue('¼')`产生0.25.Unicode的乐趣...... ;-)
@RustyNail在原始问题的情况下 - 具体询问他在哪里知道char代表一个数字 - *这*是正确的答案

3> faulty..:

有没有人考虑使用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
}

它更安全,更不容易出错


@logout不,它是StackOverflow上的答案如何促进膨胀软件的一个例子.这实际上是不必要的膨胀,我不明白为什么这被认为优于从char中减去''0'.
绝对正确的方法。如果要抛出非整数输入,请选择第一个;如果要执行其他操作,请选择第二个。

4> sontek..:
char c = '1';
int i = (int)(c-'0');

你可以用它创建一个静态方法:

static int ToInt(this char c)
{
    return (int)(c - '0');
}



5> RollerCosta..:

试试这个

char x = '9'; // '9' = ASCII 57

int b = x - '0'; //That is '9' - '0' = 57 - 48 = 9



6> Nikolay..:

默认情况下你使用UNICODE所以我建议使用faulty的方法

int bar = int.Parse(foo.ToString());

即使数字和基本拉丁字符下的数值相同.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有