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的声明顺序。

 

你可能感兴趣的:(File)