我刚开始使用bits。我正在尝试使用现有的协议,它可以发送三种不同类型的消息。
类型1是16位结构:
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。位字段结构表示如下所示:
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应用程序中。
谢谢。
布拉德
发布于 2009-11-26 01:36:25
你不必这样做,这就是联合关键字的用武之地--你可以同时指定所有的位,或者用不同的名字引用相同的位,一次设置它们。
https://stackoverflow.com/questions/1797345
复制相似问题