为什么
int number =2;
char i = (char)('0' +(char)(number % 10) );
 s= i.ToString();Response.Write(s);

char i = (char)('0' +'2');
            s= i.ToString();
            Response.Write(s);
输出结果不一样呢?
       

解决方案 »

  1.   

    还没测试,不过我感觉答案应该是“2b”LZ如果你不是玩我们我就好好给你分析分析哈哈
      

  2.   

    (char)(number % 10)
    是数值为2的char
    '2'
    是数值为50的字符,
      

  3.   

    我来了!
    不说别的,先上图!看了图应该知道为什么了吗?还要解释吗?真的不要解释吗?真的要解释吗?难道还要解释吗?
    哥不说,你懂的......
    程序源码:using System;
    using System.Text;
    class Class1
    {
        static void Main()
        {
            int number = 2;
            char i = (char)('0' + (char)(number % 10));
            Console.WriteLine("(number % 10)数据类型:" + (number % 10).GetType() + "  ;值是:" + (number % 10));
            Console.WriteLine("(char)(number%10)的数据类型:" + ((char)(number % 10)).GetType() + "  ;值是:" + (char)(number % 10));
            Console.WriteLine("'0' + (char)(number % 10)的数据类型是:" + ('0' + (char)(number % 10)).GetType() + "  ;值是:" + ('0' + (char)(number % 10)));
            Console.WriteLine("(char)('0' + (char)(number % 10))的数据类型是:" + ((char)('0' + (char)(number % 10))).GetType() + "  ;值是:" + (char)('0' + (char)(number % 10)));
            Console.WriteLine("第一个题目结果是:"+i);
            Console.WriteLine("第一个问题回答完毕!\n\n\n开始第二个问题\n\n");
            char i2 = (char)('0' + '2');
            Console.WriteLine("'0'+'2'的数据类型是:"+('0'+'2').GetType()+"  ;值是:"+('0'+'2'));
            Console.WriteLine("看出问题来了吗?值是98,对应ASCII表的小写字母b");
            Console.WriteLine("第二个题目结果是:"+i2);
        }
    }
      

  4.   

    因为(char)2表示ASCII码为2的字符(0-127),而'2'的ASCII码为50(0x32)。
      

  5.   

    附:ASCII表
    看一下字符2对应的ASCII值是多少?不用解释了吧
      

  6.   

    不是啊,我试过了,前面的是2,后一个是b,为什么经过强制转换(char)(number % 10)结果就不一样了呢
      

  7.   

    猴子哥哥,'2'不属于char类型吗?
      

  8.   


    哦我知道了,你其实是不太理解C#的char类型。在C#中,char类型用于声明unicode字符,C#用2个字节来表示一个Unicode字符。
    你将2强制转换为char类型的,查一下ASCII表,即可知道其对应的值是50。
    如果你学过 C,你就会清楚,我们只需要将英文字符型数据强制转换成合适的数值型数据,就可以得到相应的 ASCII 码;反之,如果将一个合适的数值型数据强制转换成字符型数据,就可以得到相应的字符。
    C# 中字符的范围扩大了,不仅包含了单字节字符,也可以包含双字节字符,如中文字符等。而在字符和编码之间的转换,则仍延用了 C 语言的做法――强制转换。不妨看看下面的例子private void TestChar() {
    char ch = 'a'; short ii = 65;
    this.textBox1.Text = "";
    this.textBox1.AppendText("The ASCII code of \'" + ch + "\' is: " + (short) ch + "\n");
    this.textBox1.AppendText("ASCII is " + ii.ToString() + ", the char is: " + (char) ii + "\n");
    char cn = '中'; short uc = 22478;
    this.textBox1.AppendText("The Unicode of \'" + cn + "\' is: " + (short) cn + "\n");
    this.textBox1.AppendText("Unicode is " + uc.ToString() + ", the char is: " + (char) uc + "\n");
    }
      它的运行结果是The ASCII code of 'a' is: 97
    ASCII is 65, the char is: A
    The Unicode of '中' is: 20013
    Unicode is 22478, the char is: 城  从这个例子中,我们便能非常清楚的了解――通过强制转换,可以得以字符的编码,或者得到编码表示的字符。
      

  9.   

    (char)(2)不等于'2' (char)32  == '2'
      

  10.   

    谢谢猴子哥哥啊,我明白您说的。主要是我感觉char)(2)应该等于'2',因为他俩的类型是相等吧!其实是他们俩ASCLL是不相等的啊!
      

  11.   

    这种转换是看的ASCII码。还是用Converter或者string.Format吧。