代码改变世界

char,int转换

2011-03-10 10:42  MichaelYin  阅读(4613)  评论(1编辑  收藏  举报

写一个Console小程序的时候需要用户输入数字,然后在程序中进行获取,本来以为很简单的,没想到也发生了一些曲折。。

在Console类中,Console.Read获取的用户输入的单个字符,.net内存中的字符的存储都是采用的Unicode编码,所以这个方法返回的是该字符的Unicode编码的十进制值,对于Unicode不是很了解的朋友可以参考我的另外一篇Post字符编码那些事儿,如果我需要得到这个字符具体是多少,只需要调用Convert.ToChar就可以了。来看个例子

        int a = Console.Read();

        char c = Convert.ToChar(a);

在Console窗口中按Ctrl+空格打开中文输入法,这样可以在Console中输入中文,然后敲随便一个中文,比如’我’,设置断点可以发现运行到第二行的时候变量c的值是’我’,这样基本就告诉我们了其中的一些基本的原理。就想我前面说的Console.Read返回的是’我’这个字符的Unicode编码的值,如果我们输入’3’,那么a并不是3,而是3的Unicode编码的值,也就是51。

这个51在程序中已经是int类型了,如果我们需要重新得到原始的Char,使用方法Convert.ToChar就可以。

实际中另外一种情况是,我在Console中输入数字,希望在程序中重新得到数字,这时候,上面的方法就不行了,因为它只能得到char.

有的朋友可能会说,Convert类中包含了基本类型的转换,直接用不就行了么,的确,Convert类中确实有Convert.ToInt32方法用于将char转换为int,但是,这个转换是基于2进制实际值的转换,也就是说,我将字符’3’放进去,得到的结果是字符’3’的二进制表示的int值,也就是51.

园子里有的人用的是int.parse的方法,这个方法使用每次必须将char转换成string类型才行,实现是可以实现,但是每次都转换成string 感觉十分的丑陋。

在文档里面找了一下,发现了这个方法。GetNumericValue,直接提供了char到int的转换,可以将字符’3’直接转换为double类型。