使用 StackExchange.Redis 从 Redis 返回 C# 位数组

Returning a C# bitarray from Redis with StackExchange.Redis

我正在尝试取回之前使用 db.StringSetBit()

在密钥上设置的位

目前我有:

byte[] bitLookup = db.StringGet(key);
BitArray barr = new BitArray(bitLookup);

我的问题是,我似乎无法弄清楚这些位的返回顺序,因为我得到了奇怪的结果,其中的位设置在完全错误的偏移量中。

我终于想通了。

迭代 BitArray 中的位,如果设置了位,则使用以下方法使用设置位的索引计算位位置:

private int keyFromBitIndex(int bitIdx)
{
    var upper = (((int)Math.Ceiling(bitIdx / 8d) * 8) - 1);
    var lower = (bitIdx - (int)(Math.Floor(bitIdx / 8d) * 8));
    return upper - lower;
}