瀏覽代碼

Update JT808EnumExtensions.cs (#20)

修改为更直接的方式判断二进制位,808的报警标志位和状态都是uint
tags/v2.3.5
逐浪人 4 年之前
committed by GitHub
父節點
當前提交
b25737ab19
沒有發現已知的金鑰在資料庫的簽署中 GPG 金鑰 ID: 4AEE18F83AFDEB23
共有 1 個檔案被更改,包括 17 行新增6 行删除
  1. +17
    -6
      src/JT808.Protocol/Extensions/JT808EnumExtensions.cs

+ 17
- 6
src/JT808.Protocol/Extensions/JT808EnumExtensions.cs 查看文件

@@ -170,16 +170,27 @@ namespace JT808.Protocol.Extensions
/// <param name="digit">位数(8,16,32)</param> /// <param name="digit">位数(8,16,32)</param>
/// <param name="ignoreUnknown">是否忽略未知数据</param> /// <param name="ignoreUnknown">是否忽略未知数据</param>
/// <returns></returns> /// <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>(); List<T> values = new List<T>();
if (digit > 32)
{
digit = 32;
}

for (int i = 0; i < digit; i++) 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) if (ignoreUnknown)
{ {


Loading…
取消
儲存