如何在c#
上对字符串进行按位运算例如
string sr1="0101110";
string sr2="1101110";
sr1 & sr2="0101110";
或
sr1 | sr2="1101110";
我如何进行这样的比较?
注意字符串长度固定为1440个字符
这是我的肮脏解决方案
private string compareBitWiseAnd(string sr1, string sr2)
{
char[] crArray1 = sr1.ToCharArray();
char[] crArray2 = sr2.ToCharArray();
StringBuilder srResult = new StringBuilder();
for (int i = 0; i < crArray1.Length; i++)
{
if (crArray1[i] == crArray2[i])
{
srResult.Append(crArray1[i]);
}
else
{
srResult.Append('0');
}
}
return srResult.ToString();
}
private string compareBitWiseOr(string sr1, string sr2)
{
char[] crArray1 = sr1.ToCharArray();
char[] crArray2 = sr2.ToCharArray();
StringBuilder srResult = new StringBuilder();
for (int i = 0; i < crArray1.Length; i++)
{
if (crArray1[i] == '1' || crArray2[i] == '1')
{
srResult.Append("1");
}
else
{
srResult.Append('0');
}
}
return srResult.ToString();
}
答案 0 :(得分:3)
Convert到实际位,然后进行逐位比较。
int num1 = Convert.ToInt32(sr1, 2);
int num2 = Convert.ToInt32(sr2, 2);
int result = num1 & num2;
如果您想从result
获取二进制字符串,请使用this。
答案 1 :(得分:2)
您必须先将字符串转换为数字,您可以使用“Convert.ToInt32(String,Int32)”,第二个参数允许您指定基数:
string sr1 = "0101110";
string sr2 = "1101110";
int one = Convert.ToInt32(sr1, 2);
int two = Convert.ToInt32(sr2, 2);
int result = one & two;
希望它有所帮助。
答案 2 :(得分:2)
BigInteger
是您要查找的类型。它还有BitwiseOr。
如果你真的需要坚持使用字符串,那么在逐个字符的基础上计算按位运算并不是很困难......但是如果可能的话,我会避免这样做。
以下是关于如何从任意基础的字符串构建BigInteger
的问题 - BigInteger Parse Octal String?
var bitString = "10101";
BigInteger value = bitString.Aggregate(new BigInteger(), (b, c) => b * 2 + c - '0');
答案 3 :(得分:1)
您无法按照预期的方式对字符串执行按位操作。对于具有其他目标的字符串的逐位操作,你可以做一些有趣的事情,比如改变它们的情况,但我认为这就是你想要的:
// Convert the string to an integer
int foo = Convert.ToInt32(sr1, 2);
int bar = Convert.ToInt32(sr2, 2);
// Perform binary styff
int result = foo & bar;
// Convert back to a string, if you want
string resultStr = result.ToString();
答案 4 :(得分:1)
我喜欢Alexei的BigInteger
解决方案,但它确实需要.NET 4.0。如果由于某种原因你不能使用它,那么另一种选择是使用自.NET 1.1以来一直可用的BitArray
类。不幸的是,BitArray
没有内置解析二进制字符串的方法,因此您必须手动执行此操作,类似于Alexei的解决方案。
另一个选项是我写的一个名为BoolArray
的类,它与BitArray
做了很多相同的事情,但确实有一个解析二进制字符串的方法 - 使用静态BoolArray.FromBinaryString
方法:
BoolArray bin = BoolArray.FromBinaryString("1001011000111010101"); // etc
这是BoolArray source code。但请注意,它并不完整,也没有经过全面测试,但我没有立即发现任何错误。
编辑:在粘贴原始链接后,我注意到代码使用了我的“Utils”库的不同类中提供的函数,并且不会直接编译。我已更新链接以在代码中提供此类...希望这是唯一的情况,但如果不是让我知道,我可以解决。