首先,我想知道这是否可能:假设我有一个 unsigned long ,其中包含一些 abritrary unsigned short ,它可能在数字中,也可能不在数字中。例如:
unsigned short int id1 = 3456,
id2 = 30998;
unsigned long long bitfld = id1|id2;
其他2个字段可以假设为0吗?OR 是正确的操作吗?之后,假设我将 bitfld 作为参数传递:
void dostuff (unsigned long long bf)
{
//pseudo code
if( the first field exists in bf)
get first field;
if( the second field exists in bf)
get second field;
//etc...
}
我想我必须轮询位域的前 16 位并检查它们,然后递归地轮询它们,验证它们并在它们大于 0 时存储它们。但我不确定如何做到这一点,位移只会移位左或右,因此,它只除或乘对吗?
很抱歉撞到了。感谢大家的回答,但我最终使用了一种更简单、更有效的方法,一种内部结构。你看,我可以用一个字符串轻松地做到这一点,但我的目的是对代码的用户透明,可以这么说很容易编程。我创建了一个内部结构来保存我的值,然后创建一个公共方法来创建和返回这种结构,因此它易于使用且解析速度更快(尽管它具有在堆栈中分配一个(虽然很小)结构的开销,它位域解决方案没有,但唉)。
所以谢谢大家的回答。