0
我有一個關於位掩碼的問題,我完全不知道。 在應用程序中,目前有采取地址字節[]的方法,並從中確定哪些警報(布爾型)是true
的false
。C#中的位掩碼,從枚舉轉換爲字節[]
我期待扭轉這一點。我會有一個屬性列表(布爾),並基於哪些是真實的,我會創建一個地址。
是否有一個簡單的內置方法來做到這一點?
任何幫助將不勝感激。下面我附上了我的代碼,以獲取地址中啓用了哪些標誌。
public struct DeviceStatus
{
[Flags]
public enum DeviceStatusMasks
{
None = 0x0,
EmergencyButton = 0x00000001,
StartButton = 0x02,
Door1Interlock = 0x04,
Door2Interlock = 0x08,
AccessPanelInterlock = 0x10,
TubeTemperature = 0x20,
SystemTemperature = 0x40,
DeviceTouchScreenError = 0x80,
FlashValueCorrupt = 0x100,
VoltageRailError3_3V = 0x200,
VoltageRailError5V = 0x400,
VoltageRailError24V = 0x800,
HvPsuWarmUpTimerElapsed = 0x1000,
// ReSharper disable InconsistentNaming
kVValueOutsideRange = 0x2000,
mAValueOutsideRange = 0x4000,
// ReSharper restore InconsistentNaming
PreheatValueError = 0x8000,
FilamentCurrentError = 0x10000,
KeySwitchOff = 0x00020000,
StandbyButtonPressed = 0x40000,
ErrorTrapState = 0x80000,
PcCommunicationFailure = 0x100000
}
public DeviceStatus(byte[] value)
{
RawValue = (DeviceStatusMasks)BitConverter.ToInt32(value.Reverse().ToArray(), 0);
}
#region Public Properties
public bool CriticalError => EmergencyButtonPressed | TubeTemperatureHigh | SystemTemperatureHigh;
public bool EmergencyButtonPressed => RawValue.HasFlag(DeviceStatusMasks.EmergencyButton);
public bool StartButtonPressed => RawValue.HasFlag(DeviceStatusMasks.StartButton);
public bool Door1InterlockOpen => RawValue.HasFlag(DeviceStatusMasks.Door1Interlock);
public bool Door2InterlockOpen => RawValue.HasFlag(DeviceStatusMasks.Door2Interlock);
public bool AccessPanelInterlockOpen => RawValue.HasFlag(DeviceStatusMasks.AccessPanelInterlock);
public bool TubeTemperatureHigh => RawValue.HasFlag(DeviceStatusMasks.TubeTemperature);
public bool SystemTemperatureHigh => RawValue.HasFlag(DeviceStatusMasks.SystemTemperature);
public bool DeviceTouchScreenError => RawValue.HasFlag(DeviceStatusMasks.DeviceTouchScreenError);
public bool FlashValueCorrupt => RawValue.HasFlag(DeviceStatusMasks.FlashValueCorrupt);
public bool VoltageRailError3_3V => RawValue.HasFlag(DeviceStatusMasks.VoltageRailError3_3V);
public bool VoltageRailError5V => RawValue.HasFlag(DeviceStatusMasks.VoltageRailError5V);
public bool VoltageRailError24V => RawValue.HasFlag(DeviceStatusMasks.VoltageRailError24V);
public bool HvPsuWarmUpTimerElapsed => RawValue.HasFlag(DeviceStatusMasks.HvPsuWarmUpTimerElapsed);
// ReSharper disable InconsistentNaming
public bool kVValueOutsideRange => RawValue.HasFlag(DeviceStatusMasks.kVValueOutsideRange);
public bool mAValueOutsideRange => RawValue.HasFlag(DeviceStatusMasks.mAValueOutsideRange);
// ReSharper restore InconsistentNaming
public bool PreheatValueError => RawValue.HasFlag(DeviceStatusMasks.PreheatValueError);
public bool FilamentCurrentError => RawValue.HasFlag(DeviceStatusMasks.FilamentCurrentError);
public bool KeySwitchOff => RawValue.HasFlag(DeviceStatusMasks.KeySwitchOff);
public bool StandbyButtonPressed => RawValue.HasFlag(DeviceStatusMasks.StandbyButtonPressed);
public bool ErrorTrapState => RawValue.HasFlag(DeviceStatusMasks.ErrorTrapState);
public bool PcCommunicationFailure => RawValue.HasFlag(DeviceStatusMasks.PcCommunicationFailure);
public bool HasNoStatus
{
get
{
return !(StandbyButtonPressed | Door1InterlockOpen | Door2InterlockOpen | AccessPanelInterlockOpen | KeySwitchOff | CriticalError);
}
}
#endregion
public DeviceStatusMasks RawValue { get; }
您需要查看邏輯和單個符號。 –
好的,謝謝本 –