int i=1;
i=Convert.ToInt32(Console.Read());
如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢?
i=Convert.ToInt32("a");
但这么写又是可以转换成功的。谁能告诉我这是为什么啊?
i=Convert.ToInt32(Console.Read());
如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢?
i=Convert.ToInt32("a");
但这么写又是可以转换成功的。谁能告诉我这是为什么啊?
单个字符都有其整数的。
单击ToInt32转向定义你就可以看到很多重载。
但是上面的语句,如果我通过键盘输入字母就无法转换,这是为什么啊?
比如你输入一个a
用read()是可以转换的,但用readline()是不能转换的。
ch = Convert.ToChar(strTemp.Substring(i - 1, 1));
short asc = (short)ch;不知道你要的是不是这个.
ch = Convert.ToChar(strTemp.Substring(strTemp.Length - 1, 1));
short asc = (short)ch; 修改一下.
我输入字母后是无法转换成整型的,这是什么原因?
i=Convert.ToInt32('a'); 相当于ToInt32(Char);
i=Convert.ToInt32(Console.ReadLine()); 相当于 ToInt32(string);
我知道你的意思,但是为什么我输入数字是可以转换的呢
输入数字也是相当于 ToInt32(string);
楼上的能解释一下吗?
我说的意思是字母不能用Convert.ToInt32直接转换成整形,要从字符型强制转换成short才能得到整数值.
你的意思是数字可以用Convert.ToInt32(Console.ReadLine()); 从string类型直接转换成正型,而字母只能从字符型转换成整型吗?
这是错的,但是下面为什么就是对的呢?他们的参数不都是string吗?
b=Convert.ToInt32("123");
难道"123"就不是string了吗?就没有结束符'\0'了吗?为什么"123"可以转换而"a"就不能呢?
很清楚 C# 提供类型检查,你不能把一个 string 强制转换成 int,隐式转换就更加不可能,例如如下的代码就行不通了: string text = "1412";
int id = (int)text; 因为 string 和 int 是两个完全不同并且互不兼容的类型。说到这里,你可能会问什么才算是兼容的呢?其实,能够使用 (int) 进行强类型转换的只能是数值类型了,例如 long、short、double等,不过进行这种转换时你需要考虑精度问题。
那你希望Convert.ToInt32("abc")能出什么样的结果?是979899还是97+98+99的值?这就是岐义!所以当参数为string时只能转换纯数字的字符串,包含字母的话就会出异常。
如果你有本事修改Convert.ToInt32方法的话可以在参数为string类型的重载中加个判断:长度为1的时候视为一个char型进行转换,因为M$在这个方法中的判断方式是字符串中只要包含非数字即抛出异常,并没有判断字符串长度为1的情况。
而ToInt32(string)是一个方法,其通过算法将由字符串表达的数字转换为数字 ,所以 Convert.ToInt32("1")==1 .
其中Console.ReadLine()中输入的只能是数字形式的字符串,也就是说
只能将数字形式的字符串转换为整形格式。若不是数字形式就会抛出异常。利用try,catch可以检测到
该异常。
而int i=Convert.ToInt32('a');这种能转换是因为小写字母a对应ASCII码是整数,char型有其对应
的整数形式,所以能转换。
这个方法是用来将一个字符串表示的数字,转换成整形,输入一个字母a,因为他不是数字,所以此方法不能将其转换
于此相比i=Convert.ToInt32(char);
此方法是将字符类型转化为整形,因为你一个字符在内存中的表示也是由unicode来表示的,这个转换只是精度的转换
楼主还有什么不懂的吗???
对于像楼主说的“1”与“a”都是一个类型的参数,是不错,但是函数是一个方法,不是只由参数来控制的,像这个转换方法
他的意思就是说:我要将一个用字符串表达的数字转换为INT32,所以在遇到字符的时候肯定要出错的
不知LZ听的懂不。
public static string ReadLine ()
Read方法返回的是int,ReadLine返回的是string;
Console.ReadLine()返回的是字符串
没看到你后面说的ReadLine
i=Convert.ToInt32(Console.Read()); //就这句话而言,字母数字都可以
如果实参与形参数据类型不一致的话,会使用隐式构造函数"智能"转换数据类型,以适应形参类型.
C++ 中能自定义隐式构造函数,有个关键字叫implicit.
C# 中无疑也支持部分默认隐式构造(隐匿转换),如int a = 2;
long b = 1;
long c;
c = a + b; //自动把 int -> long严格地说,应该反编译Convert.ToInt32()函数,一探究竟.
C#隐匿转换 "a" -> 'a' -> 65,也不无可能,给有兴趣的朋友提供一个假设参考。
i=Console.Read(); //Console.Read()本来返回就是int类型
ToInt32,只能转换数字、纯数字的String或Char型的,
1,转换数字没什么问题,大家都明白。
2,Char型是有其对应的字符码的,所以Char型也是可以转换。
当然Char型里只能放一个字符,所以不管你的对其赋值“a”,与赋值“abc”,其结果是一样的,只会出现a的97
3,对于String型,你可以看一下官方的说明
“将数字的指定 String 表示形式转换为等效的 32 位有符号整数。”
已经说的很明确了,要求其String的表示形式必须是数字的。
Convert.ToInt32(String)
将数字的指定 String 表示形式转换为等效的 32 位有符号整数。
由 .NET Compact Framework 支持。
i=Convert.ToInt32(Console.Read());
如果输入的是数字则可以正常转换,但是输入字母怎么就不能转呢?
i=Convert.ToInt32('a');
"a"-----'a'字符串怎么可以转成int型呢???
中铁快运 形成了铁路运输为主、 公路运输和航空运输为辅的综合运输网络;公司建有 17 座大型仓储中心。 中铁快运拥有了大集中、 VPN 网络的计算机信息系统,覆盖了所有经营网点,通过核心业务信息系统、对外信息服务平台和与铁道部信息连接平台实现数据的共享,根据客户需求,可以通过网站、客户服务中心、信息平台为客户提供信息服务。 中铁快运秉承“安全、准时、快捷、经济”的服务理念和“为客户创造价值”的经营宗旨,为客户提供运输和物流服务的同时,根据客户需求提供运输或物流解决方案服务。 中铁快运实行大客户战略,与网络服务需求的制造商、供应商、经销商及物流商之间建立“合作共赢”的新型战略合作伙伴关系。 全国统一服务热线:95105366