Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串上的按位操作-1440个字符长度_C#_String_Bit Manipulation_Logical Operators_Operation - Fatal编程技术网

C# 字符串上的按位操作-1440个字符长度

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();

如何在c#对字符串进行位运算

范例

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