首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >位移位、掩码还是位字段结构?

位移位、掩码还是位字段结构?
EN

Stack Overflow用户
提问于 2009-11-25 22:41:33
回答 2查看 12.9K关注 0票数 4

我刚开始使用bits。我正在尝试使用现有的协议,它可以发送三种不同类型的消息。

类型1是16位结构:

代码语言:javascript
复制
struct digital 
{
 unsigned int type:2;
 unsigned int highlow:1;
 unsigned int sig1:5;
 unsigned int :1;
 unsigned int sig2:7;
};

前两位(type,在上面的struct中)总是10。第三位,高电平,决定信号是开还是关,sig1 + sig2共同定义信号的12位索引。此索引在两个字节中被0分割,它始终位于第7位。

类型2是32位结构。它有一个2位的类型,一个10位的索引和一个16位的值,在27,23,15和7的位置上散布着0。位字段结构表示如下所示:

代码语言:javascript
复制
struct analog 
{
 unsigned int type:2;
 unsigned int val1:2;
 unsigned int :1;
 unsigned int sig1:3;
 unsigned int :1;
 unsigned int sig2:7;
 unsigned int :1;
 unsigned int val2:7;
 unsigned int :1;
 unsigned int val3:7;
};

sig1和sig2共同构成了10位索引。val1 + val2 + val3一起形成10位索引处的信号的16位值。

如果我知道如何使用前两个结构,我想我可以弄清楚第三个结构。

我的问题是,有没有一种方法可以给单个值赋值,并让程序计算出需要进入val1、val2和val3的位?

我读过关于位移位、位字段结构和用0填充的内容,结构似乎是可行的,但我不确定如何实现它。我所见过的比特打包的例子中,没有一个值是以这种方式拆分的。最终,我希望能够创建一个模拟结构,分配一个索引(i = 252)和一个值(v = 32768),然后使用它。

如果有人能建议合适的方法或提供类似样本的链接,我将不胜感激。如果重要的话,这段代码将被合并到一个更大的Objective-C应用程序中。

谢谢。

布拉德

EN

Stack Overflow用户

发布于 2009-11-26 01:36:25

你不必这样做,这就是联合关键字的用武之地--你可以同时指定所有的位,或者用不同的名字引用相同的位,一次设置它们。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1797345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档