通常在使用硬件接口时,您必须设置位组或设置它们而不更改其余位。界面描述说: 你得到一个System.UINT32,如果可用则设置位0;位1..7表示最小值;位8..14是最大值;位15..17是阈值等 我必须为很多值执行此操作,每个值都有自己的开始和停止位。
这就是为什么我想创建一个可以将值(起始位;停止位;原始UINT32值)转换为它所代表的值的类,然后返回。
类似于:
class RawParameterInterpreter
{
public int StartBit {get; set;} // counting from 0..31
public int StopBit {get; set;} // counting from 0..31
Uint32 ExtractParameterValue(Uint32 rawValue);
Uint32 InsertParameterValueToRawValue(Uint32 parameterValue,
Uint32 rawValue);
}
我理解处理位的部分:
// example bits 4..7:
extract parameter from raw value: (rawvalue & 0x000000F0) >> startbit;
insert parameter into raw: (parameter << startbit) | (rawValue & 0xFFFFFF0F)
问题是,如何从值startBit和endBit初始化0x000000F0和0xFFFFFF0F?有没有一种通用的方法来计算这些值?
我会用这样的东西
Uint32 bitPattern = 0;
for (int bitNr = startBit; bitNr <= stopBit; ++bitNr)
{
bitPattern = bitPattern << 2 + 1;
}
bitPattern = bitPattern << startBit;
我知道System.Collections.BitArray类。这样可以更容易设置位,但是如何将BitArray转换回Uint32?
所以问题:对此最好的方法是什么?
答案 0 :(得分:2)
嗯,你的问题非常笼统,但是,
您可以使用enum
with a Flags
属性。
[Flags]
public enum BitPattern
{
Start = 1,
Stop = 1 << 31
}