Kaynağa Gözat

Update JT808EnumExtensions.cs (#20)

修改为更直接的方式判断二进制位,808的报警标志位和状态都是uint
tags/v2.3.5
逐浪人 4 yıl önce
committed by GitHub
ebeveyn
işleme
b25737ab19
Veri tabanında bu imza için bilinen anahtar bulunamadı GPG Anahtar Kimliği: 4AEE18F83AFDEB23
1 değiştirilmiş dosya ile 17 ekleme ve 6 silme
  1. +17
    -6
      src/JT808.Protocol/Extensions/JT808EnumExtensions.cs

+ 17
- 6
src/JT808.Protocol/Extensions/JT808EnumExtensions.cs Dosyayı Görüntüle

@@ -170,16 +170,27 @@ namespace JT808.Protocol.Extensions
/// <param name="digit">位数(8,16,32)</param>
/// <param name="ignoreUnknown">是否忽略未知数据</param>
/// <returns></returns>
public static IEnumerable<T> GetEnumTypes<T>(this int value, int digit, bool ignoreUnknown = false) where T : Enum
public static IEnumerable<T> GetEnumTypes<T>(this uint value, int digit, bool ignoreUnknown = false) where T : Enum
{
List<T> values = new List<T>();
if (digit > 32)
{
digit = 32;
}

for (int i = 0; i < digit; i++)
{
if (Math.Pow(2, i) <= value) continue;
values.Add((T)Enum.ToObject(typeof(T), (int)Math.Pow(2, i - 1)));
value = value - (int)Math.Pow(2, i - 1);
i = 0;
if (value <= 0) break;
uint pow = (uint)1 << i;
if(pow > value)
{
break;
}
uint ret = value & pow;
if (ret != 0)
{
values.Add((T)Enum.ToObject(typeof(T), pow));
}

}
if (ignoreUnknown)
{


Yükleniyor…
İptal
Kaydet