本文主要是介绍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;
这篇关于DWORD按位写 + 取出特定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!