我是一位新手,对二进制编程不够熟悉。我尝试使用一个已有的协议,该协议可以发送三种不同类型的消息。
第一种消息是由16位结构组成:
struct digital
{
unsigned int type:2;
unsigned int highlow:1;
unsigned int sig1:5;
unsigned int :1;
unsigned int sig2:7;
};
前两位(在我的结构体中为type)始终为10。第三位highlow决定信号是开还是关,sig1和sig2共同定义了信号的12位索引。这个索引通过0来分隔两个字节,该0始终在第7位。
类型2是一个32位结构。它有一个2位类型,一个10位索引和一个16位值,其中0位分别位于第27、23、15和7个位置。按位域结构表示如下:
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应用程序中。
谢谢。
Brad