DWORD按位寫 + 取出特定位

開發一個大型工程很多時候不想去更改頭文件,但是又需要在開發後期增加

參數,除了利用原先預留的標誌位dwReserv[20],比如這裏就預留了20位;還可以將原來的參數拆分成幾個。 比如一個DWORD一共有4個字節,可以開闢每8位來儲存一個參數,之後收到的時候再取出來就行了。

例子:一個DWORD類型的參數,現在想要BIT0-BIT7 填寫colorPrimaries參數,BIT8-BIT15填寫TransferCharacteristic參數,BIT16-BIT23填寫MatrixCoefficients參數。 

這些參數都是Int類型。那麼該怎麼填充呢?

int eColourPrimaries = 9;
	int eTransferCharacteristic = 18;
	int eMatrixCoefficients = 9;
	
	DWORD nResult = eColourPrimaries;
	DWORD nTemp = eTransferCharacteristic;
    nTemp = nTemp<<8;
	nResult |= nTemp;

	nTemp = eMatrixCoefficients;
	nTemp = nTemp << 16;
	nResult |= nTemp;

簡單來說就是

nResult = eColourPrimaries |  (eTransferCharacteristic << 8 ) | (eMatrixCoefficients << 16 );

那麼怎麼取對應位的數據呢?

對方收到nResult,按照約定的方式去取對應位的參數,2進制 8位全部爲1的值是255.

DWORD filter = 255;
	int color1 = nResult & filter;
	nResult = nResult>>8;
	int trans1 = nResult&filter;
	nResult = nResult>>8;
	int matrix1 = nResult&filter;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章