位域问题

mbmseason 2007-04-08 12:42:55
该问题==以下的帖子:
[url=http://community.csdn.net/Expert/topic/5450/5450048.xml?temp=.6241114]http://community.csdn.net/Expert/topic/5450/5450048.xml?temp=.6241114[url]
具体描述为:
位域问题:
首先我用位域的方式定义了一个结构CCell,如下:
typedef tagCell
{
int CellInfo: 2;
int CellDesc: 2;
}CCell;
可以看出,CCell的有意义的空间只有4位;
现在,我想声明一个只占用1字节的结构CInfo,它里面的域是长度为2的CCell的数组(因为,我想从一个二进制文件的特定位置处读出CCell并对其中的每一个CInfo做相同的操作,为节省代码,所以要用到数组或者类似数组的处理方式)。

现在,在VC6下存在以下的问题:(其它环境没有尝试过)
首先,单独的CCell必须占用1字节空间;
其次,如果我对CInfo做以下声明typedef tagInfo{CCell cells[2] : 4;}CInfo;会发生两个错误:
1、位域变量必须使用整形,不能使用结构类型;
2、位域不能用于数组。

请问该如何定义CCell和CInfo??
...全文
375 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liel_tang 2010-06-23
  • 打赏
  • 举报
回复
这么老的问题都被我找出来了,回一个,跑起来~~
taodm 2007-04-09
  • 打赏
  • 举报
回复
位域可是很慢的。你就不省CPU了?
你有多少数据,以致于不得不省内存?
merlinfang 2007-04-09
  • 打赏
  • 举报
回复
typedef tagInfo{
char CellInfo1: 2;
char CellDesc1: 2;
char CellInfo2: 2;
char CellDesc2: 2;
}CInfo;

CInfo[]
taodm 2007-04-09
  • 打赏
  • 举报
回复
inline有啥好读不懂的,不值得成为要考虑的因素。
mbmseason 2007-04-09
  • 打赏
  • 举报
回复
to taodm;

inline是我的方法,有别的没?
inline对于其他人来看,可能会显得晦涩。
taodm 2007-04-09
  • 打赏
  • 举报
回复
你可以inline呀
mbmseason 2007-04-09
  • 打赏
  • 举报
回复
TO taodm;

这次的方法可行!
不过,重载操作符等于使用函数了,从现场保护到现场还原,这种解决方法所需要的汇编指令>7条。加上参数传递的消耗,所以我一直不大喜欢用这种方法。

其实在提问题之前,我已经有了解决方法(只使用了3条汇编指令)。来这是为了看看大家的方案,以及有没有更简便的方法。ls的不失为一个简便方法,先谢过了。
taodm 2007-04-09
  • 打赏
  • 举报
回复
struct CInfo
{
tagCell operator[](size_t){....}
INT8U data[XXXX];
};
就这种方法就可以了。
mbmseason 2007-04-09
  • 打赏
  • 举报
回复
TO taodm;

我早知道位域要消耗运算时间的。
但是到底是先重视空间还是先重视时间,是经过对比分析后决定的,不是我问的这个问题的内容了。
所以,如果有解决我的问题的方法,还是请不吝赐教。
freshui 2007-04-09
  • 打赏
  • 举报
回复
有些网络传输应用的编解码好像都用的位域吧
mbmseason 2007-04-08
  • 打赏
  • 举报
回复
没人知道么!?自己顶一次……
al0n9 2007-04-08
  • 打赏
  • 举报
回复
你可以重载CInfo的[]操作符,这样就能达到你的目的。
mbmseason 2007-04-08
  • 打赏
  • 举报
回复
为节省空间
taodm 2007-04-08
  • 打赏
  • 举报
回复
你为什么要用位域呢。
laiwusheng 2007-04-08
  • 打赏
  • 举报
回复
我想声明一个只占用1字节的结构CInfo,
我想从一个二进制文件的特定位置处读出CCell并对其中的每一个CInfo做相同的操作
typedef tagInfo{
int CellInfo1: 2;
int CellDesc1: 2;
int CellInfo2: 2;
int CellDesc2: 2;
}CInfo;

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧