代码写的真乱,不会用循环吗,写那么多无用的代码出来
想知道到底哪里不对,断点一步一步跟啊
比如这里string y = y1 + y2 + y3 + y4 + y5 + y6 + y7 + y8
你看y确实是把后面的8个按字符串拼接起来了,还是按数值相加了?

解决方案 »

  1.   

    加个
                if (y == p)
                {
                }
    断点跟,你会发现y根本和p不相等
    虽然这两个字符串看起来相同,但是它们的编码根本不一样
    不是什么字符都能按Unicode转的
      

  2.   

    简单点:
    string y1 = Convert.ToChar(49164).ToString();                       //转换成字符串
    string y2 = Convert.ToChar(56320).ToString();
    先:
    byte[] m1 = System.Text.Encoding.Unicode.GetBytes(y1);           //转换为byte[]
    byte[] m2 = System.Text.Encoding.Unicode.GetBytes(y2);           //转换为byte[]
    再:
    string p1 = System.Text.Encoding.Unicode.GetString(m1);          //转换为string
    string p2 = System.Text.Encoding.Unicode.GetString(m2);          //转换为string
    //继续
    int  a1=Convert.ToInt32(p1[0]);                           //转换为整型数
    int  a2=Convert.ToInt32(p2[0]);                           //转换为整型数
    //结果:
    a1=49164   (原来是:49164)
    a2=65533(原来是:56320)  哪里错了?如何改?
      

  3.   


                string y1 = Convert.ToChar(65533).ToString();                       //转换成字符串
                string y2 = Convert.ToChar(56320).ToString();
                byte[] m1 = System.Text.Encoding.Unicode.GetBytes(y1);           //转换为byte[]
                byte[] m2 = System.Text.Encoding.Unicode.GetBytes(y2);           //转换为byte[]
                string p1 = System.Text.Encoding.Unicode.GetString(m1);          //转换为string
                string p2 = System.Text.Encoding.Unicode.GetString(m2);          //转换为string
                //继续
                int a1 = Convert.ToInt32(p1[0]);                           //转换为整型数
                int a2 = Convert.ToInt32(p2[0]);                           //转换为整型数不是Unicode的问题,是字符串和字符本身就不是一一对应的,多个字符编码对应的同一个字符
    你用字符编码转字符的时候,没有问题,但是字符再转回字符编码,只能转成一个,而不能转成多个
      

  4.   

    因为在Unicode(UTF-16)里面,有一些码点不是真正的字符。
    一般的字符可以用两个字节(也就是一个char)来表示。但是有些特殊的字符需要用4个字节来表示。为了区别两个字节和四个字节,四个字节有些特殊的规律,比如低两个字节的范围为U+DC00到U+DFFF,英文叫low surrogate。你的例子中的56320,只好落在low surrogate范围。当byte[]转换为string的时候,单个surrogate是非法的(期待两个surrogate,四个字节),因此给出转换错误的替代字符。结论:使用Unicode来转化字节串到字符串,再回到字节串,是不安全的!
    字节串~字符串的转换用用以下方式来做:
    Convert.ToBase64String
    Convert.FromBase64String
      

  5.   

    谢谢:Z65443344 /Forty2 开悟 
    正在设计一个加密算法,换个思路成功了