首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

bit filed的移栽性

2012-10-12 
bit filed的移植性是很差的。这篇笔记可能会不时地更新。?今天用VS2010普通C++解析二进制流,为了方便就用了

bit filed的移植性

是很差的。

这篇笔记可能会不时地更新。

?

今天用VS2010普通C++解析二进制流,为了方便就用了含有位域的结构体来解析,遇到一些困难。

一是对齐。这个版本msvc带bit filed的struct的对齐规则现在还没有摸清,但是基本上还是按int32来padding,但是又因bit filed的数据类型和bit数目而异。

二是顺序。这个版本msvc从右往左安置bit filed,举例说明,一个共8bit的很简单的struct定义和赋值如下:

struct {unsigned x1:1;unsigned x2:1;unsigned x3:1;unsigned x4:1;unsigned x5:1;unsigned x6:1;unsigned x7:1;unsigned x8:1;} stTmp;stTmp.x1 = 1;stTmp.x2 = 0;stTmp.x3 = 1;stTmp.x4 = 0;stTmp.x5 = 1;stTmp.x6 = 1;stTmp.x7 = 1;stTmp.x8 = 1;

?最后的8个bit应该是10101111,但是msvc处理之后,内存之中是11110101。

光是第二点就让我想放弃位域的方式来解析这次的数据流。这次的数据流的文档是顺着写的,但是如果要用msvc的struct with bit filed来解析,就得颠倒很多bit field的声明顺序。

?

热点排行