日期:2014-05-17  浏览次数:20901 次

问个C#位操作的问题
写个程序,用网端接收字符信息,由于是经过简单的加密信息(简单的与或操作),由于加密端是用C++写的,C++ char 是八位的,所以C#下面我是用byte[]来接收数据,然后通过反与操作,得到明文。现在C#的雨操作出现无法隐式转换的问题。


public byte[] getEncData(string data,byte key)
{
  byte[] byteArray = Encoding.GetEncoding("GB2312").GetBytes(data);
  byte[] temp[]=new byte[50];
  foreach(byte b in byteArray)
  {
     temp[i] =b^key;//这里错误提示不能将ini隐式转换为byte,两个是byte的编译器怎么搞出个ini?
  }
  return temp;
}

该怎么搞

------解决方案--------------------
 temp[i] = (byte)(b^key);
------解决方案--------------------
两个byte进行计算非常可能溢出,所以C#的两个byte计算之后都是返回int
------解决方案--------------------
按位与 (&)、或 (
------解决方案--------------------
) 非 XOR (^) 运算符
如果一个操作数是后期绑定的变量或者两个操作数均是常值数据,则将两个操作数被强制为 int (System.Int32),然后执行运算,返回的值为 int。