0
나는 완전히 새로운 것에 대한 비트 마스킹과 관련하여 질문이 있습니다. 응용 프로그램에는 현재 주소의 바이트 []를 취하고 true
의 false
인 경보 (bool)를 결정하는 수단이 있습니다.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; }
당신은 논리적이고, 단일 및 기호를 볼 필요가있을 것이다. –
오케이 감사합니다. 벤 –