int main()
{
     char[] s = new char[40];
     string p="箶知失";
     for(int temp=0;temp<p.Length;temp++)
     {
          s[temp]=p[temp];
     }
     for(int temp=0;temp<s.Length;temp++)
     {
          if(s[temp]<0)
          {
               if(s[temp+1]==0) break;
          }
          s[temp]^=0x77;
     }
     Console.Write(s);
}

解决方案 »

  1.   

    char[] s = "箶知失".ToCharArray();
    for(int i = 0; i< s.Length;i++)
    s[i] = (char)((int)s[i]^0x77);
    Console.WriteLine(s);就这么简单。
      

  2.   

    to:Pasu_Player
       程序语法没错,可是结果错了,正确的输出应该是“广州市”
      
       
       各位大虾继续帮忙啊
      

  3.   

    to:AhBian 
       朋友你的最后输出也不对
       
      原C++代码的输出结果是"广州市"   没人能解答吗?
      

  4.   

    如果实在要用这种方式加密,建议用ENCODE来做,直接把GB文字指定成BIG5。解密时只要指回BG就行了,不用这么麻烦地搞这个
      

  5.   

    to:ajqc
       请详细指点一下,我必须使用上面的C++中的算法!
      

  6.   

    如果按你说的转成BIG5."广州市"是给转成"嫘笣庈".转回来时一样是"广州市"
    要源程序吗
      

  7.   

    to:ajqc
       是这样的,原来算法是用^0x77加密和解密的,算法不能改,
        上面的C++可以把"箶知失"转换成"广州市",
       我必须同样用C#能实现将"箶知失"转换成"广州市",
       而不是将"嫘笣庈"转换成"广州市"。
       
       简单说就是用C#重写上面的C++代码!
       只因楼上前面几位朋友提供的C#代码均不能实现原来的功能。
       
       所以向各位大虾继续求解!
      

  8.   

    那你直接把它用VC.NET做成类.在C#中用就行了
      

  9.   

    呵呵,你原来的编码是AscII的呢还是Unicode?给你一个Unicode吧:
    string s = "箶知失";
    byte[] bs = System.Text.Encoding.Unicode.GetBytes(s);
    for (int i = 0; i < bs.Length; i++)
    {
        bs[i] ^= 0x77;
    }
    s = System.Text.Encoding.Unicode.GetString(bs);
    Console.WriteLine(s);不过我估计你的编码是AscII的,那么你把上面的两个Unicode都改成GetEncoding("GB2312")就行了。此外我提醒你,并不是所有的字符经过 ^0x77 运算之后仍然是一个有效的字符。无效的字符你在VC里面是能够装到char数组里面去的,但是如果你在C#里面试图装载非法字符到char[]或者string里面,他会自动吧这个字符改成某一个固定代码的值,并且肯定不是原来的那个值了,这样会导致你解密失败。所以正确的做法是:直接将你加密过的密文装到byte[]里面,而不要读到char[]或者string里面。如果你还要做加密那部分的话,也不要将已经加密过的密文放到char[]或者string里面在输出到屏幕或者文件当中,这样很肯能会导致输出的不是你的密文内容,而是已经将非法字符替换成"?"的内容了。
      

  10.   

    string str = "箶知失";//Encoding.GetEncoding("gb2312") 也可
    //Encoding.GetEncoding("gb18030") 也可
    //在简体中文平台上 Encoding.Default 也可,
    Encoding enc = Encoding.GetEncoding(936);
    byte[] bytes = enc.GetBytes(str);for (int i = 0; i < bytes.Length; i++)
    {
    if (bytes[i] > 127) //原义是:if ((sbyte)bytes[i] < 0)
    {
    i++;
    if (i >= bytes.Length // 防止数组索引越界
    || bytes[i] == 0) 
    break;
    }
    bytes[i] ^= 0x77;
    }
    Console.WriteLine(enc.GetString(bytes));//