diff --git a/src/JT808.Protocol/Extensions/JT808EnumExtensions.cs b/src/JT808.Protocol/Extensions/JT808EnumExtensions.cs index 4667129..7b6d193 100644 --- a/src/JT808.Protocol/Extensions/JT808EnumExtensions.cs +++ b/src/JT808.Protocol/Extensions/JT808EnumExtensions.cs @@ -170,16 +170,27 @@ namespace JT808.Protocol.Extensions /// 位数(8,16,32) /// 是否忽略未知数据 /// - public static IEnumerable GetEnumTypes(this int value, int digit, bool ignoreUnknown = false) where T : Enum + public static IEnumerable GetEnumTypes(this uint value, int digit, bool ignoreUnknown = false) where T : Enum { List values = new List(); + 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) {