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)
{