c#的异或运算符

 int a = 5;
 int b = 30;
 Console.WriteLine(a^b);
 Console.ReadKey();  输出结果是27

这是因为 5的二进制是
0000 0101
30的二进制是
0001 1110

异或的算法就是,两个二进制数的每一位进行比较,如果相同则为0,不同则为1,即


0000 0101
0001 1110
--------------
0001 1011
而00011011表示的十进制数是27。

 

==============================================

ublic partial class FormCRC : Form

 {

     public FormCRC()

     {

         InitializeComponent();

     }

 

     private void FormCRC_Load(object sender, EventArgs e)

     {

 

     }

     /// <summary>

     /// CRC异或校验

     /// </summary>

     /// <param name="cmdString">命令字符串</param>

     /// <returns></returns>

     private static string CRC(string cmdString)

     {

         try

         {

             //CRC寄存器

             int CRCCode = 0;

             //将字符串拆分成为16进制字节数据然后两位两位进行异或校验

             for (int i = 1; i < cmdString.Length / 2; i++)

             {

                 string cmdHex = cmdString.Substring(i * 2, 2);

                 if (i == 1)

                 {

                     string cmdPrvHex = cmdString.Substring((i - 1) * 2, 2);

                     CRCCode = (byte)Convert.ToInt32(cmdPrvHex, 16) ^ (byte)Convert.ToInt32(cmdHex, 16);

                 }

                 else

                 {

                     CRCCode = (byte)CRCCode ^ (byte)Convert.ToInt32(cmdHex, 16);

                 }

             }

             return Convert.ToString(CRCCode, 16).ToUpper();//返回16进制校验码

         }

         catch

         {

             throw;

         }

     }

 

     private void btnConvert_Click(object sender, EventArgs e)

     {

         try

         {

             txtCRCCode.Text = CRC(txtCMDString.Text.Replace(" """));

         }

         catch

         {

             MessageBox.Show("校验失败,请检查字符串是否包含特殊字符");

         }

     }

 }

  执行结果:

 

C# 异或校验法

public byte Get_CheckXor(byte[] data)
{
byte CheckCode = 0;
int len = data.Length;
for (int i = 0; i < len; i++)
{
CheckCode ^= data[i];
}
return CheckCode;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值