C# 字符串上的按位操作-1440个字符长度
如何在c#对字符串进行位运算 范例C# 字符串上的按位操作-1440个字符长度,c#,string,bit-manipulation,logical-operators,operation,C#,String,Bit Manipulation,Logical Operators,Operation,如何在c#对字符串进行位运算 范例 string sr1="0101110"; string sr2="1101110"; sr1 & sr2="0101110"; 或 我怎样才能作出这样的比较呢 注意字符串长度是固定的1440个字符 这是我肮脏的解决办法 private string compareBitWiseAnd(string sr1, string sr2) { char[] crArray1 = sr1.ToCharArray();
string sr1="0101110";
string sr2="1101110";
sr1 & sr2="0101110";
或
我怎样才能作出这样的比较呢
注意字符串长度是固定的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();
}
private string compareBitWiseAnd(string sr1,string sr2)
{
char[]crArray1=sr1.ToCharArray();
char[]crArray2=sr2.ToCharArray();
StringBuilder srResult=新的StringBuilder();
for(int i=0;i
首先转换为实际位,然后进行逐位比较
int num1 = Convert.ToInt32(sr1, 2);
int num2 = Convert.ToInt32(sr2, 2);
int result = num1 & num2;
如果要从
结果中获取二进制字符串,请使用 不能按您所希望的方式对字符串执行逐位操作。对于具有其他目标的字符串,您可以通过按位操作执行一些有趣的操作,例如更改其大小写,但我认为这正是您想要的:
// 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();
首先必须将字符串转换为数字,可以使用“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;
希望对您有所帮助。biginger
是您要找的类型。它也有
如果您真的需要使用字符串,那么在逐字符的基础上计算逐位运算并不是很难。。。但如果可能的话,我会避免这样做
这是一个关于如何从任意基的字符串构造biginger
的问题-
我喜欢Alexei的BigInteger
解决方案,但它至少需要.NET4.0。如果出于某种原因您不能使用该类,那么另一个选项是使用自.NET 1.1以来一直可用的BitArray
类。不幸的是,BitArray
中没有内置的方法来解析二进制字符串,因此您必须手动进行解析,类似于Alexei的解决方案
另一个选项是我编写的名为BoolArray
的类,它与BitArray
有很多相同的功能,但是有一个解析二进制字符串的方法-使用静态BoolArray。FromBinaryString
方法:
BoolArray bin = BoolArray.FromBinaryString("1001011000111010101"); // etc
这是你的电话号码。然而,请注意,它并不完全,也没有经过全面测试,但我并没有立即意识到任何bug
编辑:粘贴原始链接后,我注意到代码使用了我的“Utils”库的另一个类中提供的函数,因此不会直接编译。我已经更新了链接,在代码中也提供了这个类。。。希望这是唯一的情况,但如果不让我知道,我可以修复。为什么您的数字以字符串开头?如果这与有关,请注意,将数字作为字符串处理效率极低。@MattiVirkkunen感谢您的警告。实际上,这是一种散列和散列检查操作。所以我们可以说点别的。我也尝试了int64的答案,但还是太大了。OP:这个答案比我的答案快了大约一分钟。谢谢你的答案,但我的字符串长度是1440个字符,所以你的解决方案会失败。我想你应该在一开始就这么说,你不能吗?谢谢你的回答,但我的字符串长度是1440个字符,所以你的解决方案会失败。我想谢谢你的回答,但我的字符串长度是1440个字符,所以你的解决方案会失败。我想,当我第一次读你的问题时,不寻常的长字符串长度没有说明。好的,你的解决方案有效,但在你这样做之后&操作将如何操作再次将该大整数转换为位数组:D@MonsterMMORPG-搜索应该提供几种方法-我最近看到了几种解决方案。我将转换为字节,然后根据需要将每个字节+填充的字符串表示形式与“0”连接起来。是的,我需要这些。但毕竟,您的解决方案(包括转换为字节,然后用pad 0连接每个字节的字符串)或我的脏解决方案工作得更快吗?5000个字符长:)
var bitString = "10101";
BigInteger value = bitString.Aggregate(new BigInteger(), (b, c) => b * 2 + c - '0');
BoolArray bin = BoolArray.FromBinaryString("1001011000111010101"); // etc