好的,我说我有一个名为bits
的布尔数组,以及一个名为cursor
我知道我可以使用bits[cursor]
来访问各个位,并且我可以使用位逻辑从bits
获取更大的数据类型,例如:
short result = (bits[cursor] << 3) |
(bits[cursor+1] << 2) |
(bits[cursor+2] << 1) |
bits[cursor+3];
这会在读取更大的类型(如int32和int64)时产生行和行代码。
是否可以进行某种演员表并获得相同的结果?在这种情况下我根本不关心安全性(这些函数将被包装到一个处理它的类中)
说我希望从uint64_t
中获取bits
,从cursor
指定的任意地址开始,cursor
不一定是64的倍数;演员有可能吗?我想这个
uint64_t result = (uint64_t *)(bits + cursor)[0];
会工作,但它不想编译。
抱歉,我知道这是一个愚蠢的问题,我对指针数学很缺乏经验。我不只是寻找一个简短的解决方案,如果有人愿意的话,我也在寻找语法的细分。
谢谢!
答案 0 :(得分: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;
}