比较两个字符串并找到不等字符的总数量的正确方法是什么?

时间:2013-11-22 15:16:27

标签: c# string-comparison

我正在尝试比较两个字符串(Tx和Rx数据)并找到 数量的不等字符

借助以下代码,我设法获得数量

string TxData = "00001111";
string RxData = "00000000";

int distorted = 0;
for (int i = 0; i < TxData.Length; i++)
{
    if (TxData[i] != RxData[i])
    distorted++;
}
Console.Write("Distorted Bits (qty) : {0}", distorted);

结果:

扭曲位(数量):4


但我很想知道是否有更好的方法来完成这项任务?

感谢您的时间...... :)

2 个答案:

答案 0 :(得分:8)

如果它们总是相同的长度:

int distorted = TxData.Zip(RxData, (a,b) => a == b ? 0 : 1).Sum();

答案 1 :(得分:3)

我喜欢okrumnows通过它的简单性回答,但假设你真的已经有了字节(或int)并且不需要首先将它们转换为字符串,你可能会更喜欢做类似的事情:

int myMethod(byte byte1, byte byte2)
{
    //byte1 = Convert.ToByte("10010101",2);
    //byte2 = Convert.ToByte("10011101",2);
    byte xorvalue = (byte)( byte1 ^ byte2);
    return NumberOfSetBits(xorvalue);
}

private static int NumberOfSetBits(uint i)
{
    i = i - ((i >> 1) & 0x55555555);
    i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
    return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}

这会快得多。