Ped*_*o77 3 c# c++ bit-manipulation
你能帮我翻译一下这个第三方API方法的c#:
我也不理解位操作中发生的一切.
inline void SetBits(unsigned long& aValue,unsigned int aData,unsigned int aPosition,unsigned int aLength)
{
unsigned int datamask; // data mask, before aPosition shift
if (aLength == 32)
datamask = 0xFFFFFFFF;
else
datamask = (1L << aLength) - 1;
aValue &= ~(datamask << aPosition); // Clear bits
aValue |= (aData & datamask) << aPosition; // Set value
}
Run Code Online (Sandbox Code Playgroud)
我在C#版本中收到此错误:
错误运算符'<<'不能应用于'long'和'uint'类型的操作数
错误运算符'<<'不能应用于'uint'和'uint'类型的操作数
编辑:
我认为这个解决方案没问题:
private void SetBits(ref uint value, uint data, int position, int length)
{
uint datamask; // data mask, before position shift
if (length >= 32)
datamask = 0xFFFFFFFF;
else
datamask = ((uint)1 << length) - 1;
value &= ~(datamask << position); // Clear bits
value |= (data & datamask) << position; // Set value
}
Run Code Online (Sandbox Code Playgroud)