1、目标
对两个字节进行比较,统计变化位数、一位发生变化的位数、二位发生变化的位数、多位发生变化的位数。
2、代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ReverseStatisticsApp
{
public partial class Form1 : Form
{
//统计数据
int[] statisticsBits = new int[4];
/// <summary>
/// 构造函数
/// </summary>
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 开始统计
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
byte source=Convert.ToByte("0x"+textBox1.Text.Trim(),16);
byte dest = Convert.ToByte("0x" + textBox2.Text.Trim(), 16);
for(int i = 0; i < 4; i++)
{
statisticsBits[i] = 0;
}
ByteBitCompare(source, dest,ref statisticsBits);
label3.Text = $"变化位数:{statisticsBits[0]},一位变化:{statisticsBits[1]},二位变化:{statisticsBits[2]},多位变化:{statisticsBits[3]}";
}
/// <summary>
/// 位统计
/// </summary>
/// <param name="continueBits"></param>
/// <param name="statisticsBits"></param>
public static void BitStatistics(int continueBits, ref int[] statisticsBits)
{
if (continueBits == 1)
{
statisticsBits[1]++;
}
else if (continueBits == 2)
{
statisticsBits[2]++;
}
else
{
statisticsBits[3]++;
}
}
/// <summary>
/// 字节位比较
/// </summary>
/// <param name="sample"></param>
/// <param name="data"></param>
/// <param name="statisticsBits"></param>
public static void ByteBitCompare(byte sample, byte data,ref int[] statisticsBits)
{
int tempCount = 0;
int temp = sample ^ data;
for (int i = 0; i < 8; i++)
{
if ((temp & 0x01) > 0)
{
tempCount++;
statisticsBits[0]++;
}
else
{
if (tempCount > 0)
{
BitStatistics(tempCount, ref statisticsBits);
tempCount = 0;
}
}
temp = temp >> 1;
}
if (tempCount > 0)
{
BitStatistics(tempCount, ref statisticsBits);
}
}
}
}
3、运行效果