随笔 - 16, 文章 - 0, 评论 - 11, 引用 - 0
数据加载中……

利用位段让数据的含义更清晰

比方说,为了在文件中存储一个特定的内容,需要表达命令、分组、数据、来源、是否准备好等信息,经过分析你认为命令最多需要5位就够了,分组则需要9位才行,数据需要8位,来源需要12位,是否准备好只要1位。

那么就定义一个5字节的数组好了,然后再程序里分配每个字节的特定位所代表的含义。
这样的程序到底有多大,只有亲自编写了才知道,如果只写一次也就罢了,就怕突然有一天冒出一个需求,要将这些数据在网络上传输,内容都差不多,只是字节的顺序有些不同而已,天哪...我需要重写几乎所有代码,而且我还要重新测试这些代码。

有一个方法,可以轻松解决你的问题:使用位段。
位段的使用非常简单,类似下面例子中的代码:


struct _tag_Record
{
    unsigned 
int command    : 5;
    unsigned 
int group        : 5;
    unsigned 
int flag        : 5;
    unsigned 
int isready    : 1;
};

int main(void)
{
    
struct _tag_Record f;
    
int size = 0;
    size 
= sizeof(struct _tag_Record);
    f.command 
= 3;
    f.group 
= 3;

    
while(1)
    {
        f.isready
++;
        size
++;
    }
    
return 0;
}

如果真的出现了上面的需求,你只需要调整一下结构体中位段的先后顺序、甚至大小。而代码的测试工作相比起来就要小很多了。
不过需要注意的是。不同的编译器对位段的支持有所不同,包括对齐方式、字节顺序等等,都会给位段的使用带来影响。
 

posted on 2007-12-12 14:47 xlander 阅读(775) 评论(0)  编辑 收藏 引用 所属分类: 软件


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理