0

好的,假设我有一个名为 的布尔数组bits和一个名为cursor

我知道我可以使用 访问各个位bits[cursor],并且我可以使用位逻辑从 获取更大的数据类型bits,例如:

short result = (bits[cursor] << 3) |
    (bits[cursor+1] << 2) | 
    (bits[cursor+2] << 1) |
     bits[cursor+3];

但是,当读取较大的类型(如 int32 和 int64)时,这将导致代码行和代码行。

是否可以进行某种类型的演员表并达到相同的结果?在这种情况下,我根本不关心安全性(这些函数将被包装到一个处理该问题的类中)

假设我想得到一个uint64_tout bits,从 指定的任意地址开始cursor,whencursor不一定是 64 的倍数;这可以通过演员表吗?我以为这个

uint64_t result = (uint64_t *)(bits + cursor)[0];

会工作,但它不想编译。

抱歉,我知道这是一个愚蠢的问题,我对指针数学非常缺乏经验。我不只是在寻找一个简短的解决方案,如果有人愿意的话,我也在寻找语法的细分。

谢谢!

4

1 回答 1

0

您可以尝试这样的事情并将结果转换为您的目标数据大小。

uint64_t bitsToUint64(bool *bits, unsigned int bitCount)
{
    uint64_t result = 0;
    uint64_t tempBits = 0;
    if(bitCount > 0 && bitCount <= 64)
    {
        for(unsigned int i = 0, j = bitCount - 1; i < bitCount; i++, j--)
        {
            tempBits = (bits[i])?1:0;
            result |= (tempBits << j);
        }
    }
    return result;
}
于 2013-05-28T15:06:13.423 回答