gpt4 book ai didi

c++ - 解析一个位域参数,如何解析unsigned long中的 "discard"位?

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:49 25 4
gpt4 key购买 nike

首先,我想知道这是否可能:假设我有一个 unsigned long,其中包含一些 abritrary unsigned shorts,它可能在也可能不在数字中。例如:

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 时存储它们。但我不确定该怎么做,位shifting 只是左移或右移,因此,它只是除以或乘以右?


抱歉撞到了。感谢大家的回答,但我最终使用了一种更简单、更有效的方法,即内部结构。你看,我本可以使用字符串轻松完成此操作,但我的目的是让代码的用户透明,可以说易于编程。我创建了一个内部结构来保存我的值,然后创建了一个公共(public)方法来创建和返回这样的结构,因此它易于使用且解析速度更快(尽管它有在堆栈中分配一个(尽管很小)结构的开销,它位域解决方案没有,但唉)。

谢谢大家的回答。

最佳答案

short int 是 2 个字节长,但是 long long 是 8 个字节,所以你有某种长度不匹配;你可能是这个意思:

unsigned long long bitfld = id1|(id2<<16);

您可以检查是否有一个字段被 AND 占用:

void dostuff (unsigned long long bf)
{
//pseudo code
if(bf & 0xFFFF)
return bf & 0xFFFF;

if(bf & 0xFF00)
return (bf & 0xFFFF0000) >> 32;

//etc...
}

关于c++ - 解析一个位域参数,如何解析unsigned long中的 "discard"位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2024650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com