BitArray为零和一

时间:2018-03-21 05:02:34

标签: c# bitarray

我有这段代码......

string rand = RandomString(16);
byte[] bytes = Encoding.ASCII.GetBytes(rand);
BitArray b = new BitArray(bytes);

代码正确地将字符串转换为Bitarray。现在我需要将BitArray转换为0和1 我需要用零和一些变量进行操作(即,不用于表示perposes [没有左零填充])。有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:1)

BitArray类是用于按位运算的理想类。如果要进行布尔运算,您可能不希望将BitArray转换为bool[]或任何其他类型。它有效地存储bool值(每个值为1位),并为您提供进行按位操作的必要方法。

BitArray.And(BitArray other)BitArray.Or(BitArray other)BitArray.Xor(BitArray other)用于布尔操作,BitArray.Set(int index, bool value)BitArray.Get(int index)用于处理各个值。

修改

您可以使用任何按位操作单独操作值:

bool xorValue = bool1 ^ bool2;
bitArray.Set(index, xorValue);

您当然可以拥有BitArray的集合:

BitArray[] arrays = new BitArray[2];
...
arrays[0].And(arrays[1]); // And'ing two BitArray's

答案 1 :(得分:0)

如果要在Byte[]上执行按位操作,可以使用BigInteger类。

  1. 使用BigInteger类构造函数public BigInteger(byte[] value)将其转换为0和1。
  2. 对其执行按位操作。

    string rand = "ssrpcgg4b3c";
    string rand1 = "uqb1idvly03";
    byte[] bytes = Encoding.ASCII.GetBytes(rand);
    byte[] bytes1 = Encoding.ASCII.GetBytes(rand1);
    BigInteger b = new BigInteger(bytes);
    BigInteger b1 = new BigInteger(bytes1);
    BigInteger result = b & b1;
    
  3. BigInteger类支持BitWiseAnd和BitWiseOr

    有用的链接:BigInteger class

    Operators in BigInteger class

答案 2 :(得分:0)

您可以从integer获得0和1 BitArray数组。

            string rand = "yiyiuyiyuiyi";
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(rand);
            BitArray b = new BitArray(bytes);

            int[] numbers = new int [b.Count];

            for(int i = 0; i<b.Count ; i++)
            {
                numbers[i] = b[i] ? 1 : 0;
                Console.WriteLine(b[i] + " - " + numbers[i]);
            }

FIDDLE