代码之家  ›  专栏  ›  技术社区  ›  TimothyP

用于.NET微框架的位数组替代方案

  •  3
  • TimothyP  · 技术社区  · 14 年前

    对于.NET微框架,是否有位数组替代方案? 我只是想用bool[],但是你怎么能把它转换回来呢

    在完整的框架中,考虑到“bits”是一个位数组,以下工作正常:

    byte[] data = new byte[dimensions / 8];
    bits.CopyTo(data, 0);
    

    但我似乎在微框架中找不到BitArray类

    3 回复  |  直到 14 年前
        1
  •  5
  •   Jim Mischel    14 年前

    复制 BitArray . 首先,如果你需要少于65位,那么你可以用 long

    设置单个位:

    void Set(ref long ba, int bit)
    {
        ba |= 1L << bit;
    }
    

    清除一点:

    void Clear(ref long ba, int bit)
    {
        long mask = 1L << bit;
        mask = ~mask;
        ba &= mask;
    }
    

    要查看是否设置了位:

    bool IsSet(long ba, int bit)
    {
        long mask = 1L << bit;
        return (ba & mask) != 0;
    }
    

    如果超过64位,则需要创建一个数组( byte[] ,并执行除法以确定要修改的字节/位。如果您更改 byte .

    byte[] myBytes = new byte[128];
    

    你有1024位。

    设置一点:

    void Set (int bit)
    {
        int byte = bit/8;
        int bitIndex = bit%8;
        myBytes[byte] |= (byte)(1 << bitIndex);
    }
    

    长的 上面的例子。

        2
  •  2
  •   TheJoke    13 年前

        3
  •  0
  •   Tim Cooper    13 年前

    我上传了一个.net微框架的数组:

    http://code.tinyclr.com/project/310/bitarray-class/

    希望这有帮助。