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、運行效果