int i=1;
i=Convert.ToInt32(Console.Read());
如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢?
i=Convert.ToInt32("a");
但这么写又是可以转换成功的。谁能告诉我这是为什么啊?

解决方案 »

  1.   

    A的字符码是65
    单个字符都有其整数的。
    单击ToInt32转向定义你就可以看到很多重载。
      

  2.   

    i=Convert.ToInt32(Console.ReadLine()); 
    但是上面的语句,如果我通过键盘输入字母就无法转换,这是为什么啊?
      

  3.   

    不可能,只能编译成功,不能执行的。
    比如你输入一个a
    用read()是可以转换的,但用readline()是不能转换的。
      

  4.   

    把字符先ToChar,然后转化为short就能取到ASII码值,即整数值string strTemp = "test"
    ch = Convert.ToChar(strTemp.Substring(i - 1, 1));
    short asc = (short)ch;不知道你要的是不是这个.
      

  5.   

    把字符先ToChar,然后转化为short就能取到ASII码值,即整数值 string strTemp = "test" 
    ch = Convert.ToChar(strTemp.Substring(strTemp.Length - 1, 1)); 
    short asc = (short)ch; 修改一下.
      

  6.   

    我的问题是这句i=Convert.ToInt32(Console.ReadLine()); 
    我输入字母后是无法转换成整型的,这是什么原因?
      

  7.   

    首先纠正你的一个错误i=Convert.ToInt32("a"); 肯定是不行的 应该为i=Convert.ToInt32("a"); i=Convert.ToInt32(Console.ReadLine());   相当于 ToInt32(string);
    i=Convert.ToInt32('a');   相当于ToInt32(Char);
      

  8.   

    应该为i=Convert.ToInt32('a'); 
      

  9.   

    谢谢楼上的纠正。但我还是有疑问:
    i=Convert.ToInt32(Console.ReadLine());  相当于 ToInt32(string); 
    我知道你的意思,但是为什么我输入数字是可以转换的呢
    输入数字也是相当于 ToInt32(string); 
    楼上的能解释一下吗?
      

  10.   

    你所要的整型不是字母的ASII码吗?
    我说的意思是字母不能用Convert.ToInt32直接转换成整形,要从字符型强制转换成short才能得到整数值.
      

  11.   

    刚才测试了一上。用ReadLine方法返回的是一个string,哪怕你只输入一个字母,如果输入的不是数字就会变成一个非数字的字符串,非数字字符串ToInt32是无法转换的。
      

  12.   

    这个问题的关键是要弄清楚char类型和string类型的区别。
      

  13.   

    to chinawes :
    你的意思是数字可以用Convert.ToInt32(Console.ReadLine()); 从string类型直接转换成正型,而字母只能从字符型转换成整型吗?
      

  14.   

    如果输入的不是数字就会变成一个非数字的字符串,非数字字符串ToInt32是无法转换的。==》现在看的确是这种情况,但是我在网上也找不到这种说明。谁能给个完整的说明啊?
      

  15.   

    11,12楼就是正解。楼主仔细看Convert.ToInt32()里面的参数
      

  16.   

    i=Convert.ToInt32("a"); 
    这是错的,但是下面为什么就是对的呢?他们的参数不都是string吗?
    b=Convert.ToInt32("123");
      

  17.   

    简单点说就是char型和int型是基本数据类型,在还没有面向对象编程语言时就有的,相互之间是可以转换的,而string类型是后来才出现的,在面向对象语言中是一个类,而不是基本数据类型。在C++中string和char*差不多。"a"和'a'在内存的分配上是完全不同的,"a"中除了字符a之外还包含了一个标识字符串结束符'\0',建议你把变量的基本类型的概念好好研读一遍,最好是看C++相关的书,这个问题就很容易弄明白了。
      

  18.   

    Console.Read()转换成char看行不行
      

  19.   

    b=Convert.ToInt32("123");
    难道"123"就不是string了吗?就没有结束符'\0'了吗?为什么"123"可以转换而"a"就不能呢?
      

  20.   

    Convert.ToInt32 可以转换的类型较多
    很清楚 C# 提供类型检查,你不能把一个 string 强制转换成 int,隐式转换就更加不可能,例如如下的代码就行不通了: string text = "1412"; 
    int id = (int)text; 因为 string 和 int 是两个完全不同并且互不兼容的类型。说到这里,你可能会问什么才算是兼容的呢?其实,能够使用 (int) 进行强类型转换的只能是数值类型了,例如 long、short、double等,不过进行这种转换时你需要考虑精度问题。 
      

  21.   


    那你希望Convert.ToInt32("abc")能出什么样的结果?是979899还是97+98+99的值?这就是岐义!所以当参数为string时只能转换纯数字的字符串,包含字母的话就会出异常。
      

  22.   


    如果你有本事修改Convert.ToInt32方法的话可以在参数为string类型的重载中加个判断:长度为1的时候视为一个char型进行转换,因为M$在这个方法中的判断方式是字符串中只要包含非数字即抛出异常,并没有判断字符串长度为1的情况。
      

  23.   

    学习编程使用一个方法时要去想如果自己来实现这个方法应该怎么去做,不要只看方法的结果。写方法要综合考虑多方面因素,就拿Convert.ToInt32这个方法来说,如果明知一个string长度为1,那你为什么不在一开始就把它赋值给一个char型变量呢?因为char型是基本数据类型,内存分配在栈上,使用起来效率肯定比string高。既然已经有了对char型的单字符转换,那在转换string类型的重载时何必又要多加一个判断去增加代码量呢?把重复劳动量尽可能的降低,这是M$能大把捞钱的一个很重要的原因。
      

  24.   

    因为一个字符在内存里也是存为2进制(Int)数,所以Char和Int可以相互转换. 而 Convert.ToInt32('1') != 1 的.
    而ToInt32(string)是一个方法,其通过算法将由字符串表达的数字转换为数字 ,所以 Convert.ToInt32("1")==1 .
      

  25.   

    这个当然是不能转的啊,因为你一个字母字符通过输入不可以转换成整数的之前没有定义啊,而用"123" 的话是一个数字字符本身就是一个数字只是你输入时先转化成字符,所以可以转的,而你输入Convert.ToInt32('a')是把它转换为ASCII而已
      

  26.   

    int i=Convert.ToInt32(Console.ReadLine());
    其中Console.ReadLine()中输入的只能是数字形式的字符串,也就是说
    只能将数字形式的字符串转换为整形格式。若不是数字形式就会抛出异常。利用try,catch可以检测到
    该异常。
    而int i=Convert.ToInt32('a');这种能转换是因为小写字母a对应ASCII码是整数,char型有其对应
    的整数形式,所以能转换。
      

  27.   

    i=Convert.ToInt32(Console.Read());
    这个方法是用来将一个字符串表示的数字,转换成整形,输入一个字母a,因为他不是数字,所以此方法不能将其转换
    于此相比i=Convert.ToInt32(char);
    此方法是将字符类型转化为整形,因为你一个字符在内存中的表示也是由unicode来表示的,这个转换只是精度的转换
    楼主还有什么不懂的吗???
    对于像楼主说的“1”与“a”都是一个类型的参数,是不错,但是函数是一个方法,不是只由参数来控制的,像这个转换方法
    他的意思就是说:我要将一个用字符串表达的数字转换为INT32,所以在遇到字符的时候肯定要出错的
      

  28.   

    char存储的是数值,所以char被当作一个数值类型,而string是字符,不可以直接强制转换成int型。而你所说的123为存为string可以转换,是因为虽然是字符型,但是它还是个数字,系统在读的时候仍然可以按数字读出它的值,所以可以转换。
    不知LZ听的懂不。
      

  29.   

    public static int Read ()
    public static string ReadLine ()
    Read方法返回的是int,ReadLine返回的是string;
      

  30.   

    Console.Read() 返回的是字符的asiic码值,是一个整数,而不是字符串
    Console.ReadLine()返回的是字符串
      

  31.   


    没看到你后面说的ReadLine
    i=Convert.ToInt32(Console.Read()); //就这句话而言,字母数字都可以
      

  32.   

    http://h.iax.be/?a=6290391  色女女推荐
      

  33.   

    C++ 里有一个概念,叫"隐式构造函数",
    如果实参与形参数据类型不一致的话,会使用隐式构造函数"智能"转换数据类型,以适应形参类型.
    C++ 中能自定义隐式构造函数,有个关键字叫implicit. 
    C# 中无疑也支持部分默认隐式构造(隐匿转换),如int a = 2;
    long b = 1;
    long c;
    c = a + b; //自动把 int -> long严格地说,应该反编译Convert.ToInt32()函数,一探究竟.
    C#隐匿转换 "a" -> 'a' -> 65,也不无可能,给有兴趣的朋友提供一个假设参考。
      

  34.   

    不用这么麻烦吧,直接int i=1; 
    i=Console.Read(); //Console.Read()本来返回就是int类型
      

  35.   

    26楼正解
    ToInt32,只能转换数字、纯数字的String或Char型的,
    1,转换数字没什么问题,大家都明白。
    2,Char型是有其对应的字符码的,所以Char型也是可以转换。
        当然Char型里只能放一个字符,所以不管你的对其赋值“a”,与赋值“abc”,其结果是一样的,只会出现a的97
    3,对于String型,你可以看一下官方的说明
        “将数字的指定 String 表示形式转换为等效的 32 位有符号整数。”
       已经说的很明确了,要求其String的表示形式必须是数字的。
      

  36.   

    ------------------------------buzhidao  没看呢
      

  37.   

    MSDN说的很清楚:
    Convert.ToInt32(String)
    将数字的指定 String 表示形式转换为等效的 32 位有符号整数。 
    由 .NET Compact Framework 支持。 

      

  38.   

    int i=1; 
    i=Convert.ToInt32(Console.Read()); 
    如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢? 
    i=Convert.ToInt32('a');
    "a"-----'a'字符串怎么可以转成int型呢???
      

  39.   

    很简单,“1”转换int后是多少?是1而不是‘1’对应的ASCII码吧?(1的ASCII码不是1),那么你又有什么理由要求“a”转换后变成‘a’对应的ASCII码呢?
      

  40.   

    中铁快运,全称“中铁快运股份有限公司( China Railway Express Co., Ltd.)”是铁道部直属企业。公司由单一运输企业发展为现代物流企业和现代物流服务集成供应商。  中铁快运公司提供小件货物快递、快速货运、合同物流和国际货代服务,承担铁路旅客行李包裹、普通商品、搬家物品等社会普遍铁路运输服务。 中铁快运总部设在北京,在全国设立 32 个分公司,拥有 11 个控股子公司和 1 个参股公司。具有运输、物流理论和实践经验的专业人才队伍。  中铁快运具有网络化、信息化、专业化、国际化、集约化等主要特征,具有铁路行包快递运输网、快捷货运网、公路运输网、航空运输网、配送网、经营网、信息网 " 七网合一 " 的网络资源优势,是资源型网络化运输和物流服务企业。  中铁快运经营网络遍及全国 31 个省、自治区和直辖市,门到门服务网络覆盖国内 500 多个大中城市。同时提供70多个国家及地区的快递和国际航空、铁路货运代理服务。  
    中铁快运 形成了铁路运输为主、 公路运输和航空运输为辅的综合运输网络;公司建有 17 座大型仓储中心。  中铁快运拥有了大集中、 VPN 网络的计算机信息系统,覆盖了所有经营网点,通过核心业务信息系统、对外信息服务平台和与铁道部信息连接平台实现数据的共享,根据客户需求,可以通过网站、客户服务中心、信息平台为客户提供信息服务。  中铁快运秉承“安全、准时、快捷、经济”的服务理念和“为客户创造价值”的经营宗旨,为客户提供运输和物流服务的同时,根据客户需求提供运输或物流解决方案服务。  中铁快运实行大客户战略,与网络服务需求的制造商、供应商、经销商及物流商之间建立“合作共赢”的新型战略合作伙伴关系。 全国统一服务热线:95105366 
     
      

  41.   

    Console.Read()读取的是单个字符,可以转Console.Readline()就不行了。