From b25737ab19485223ba395f3f10dd1f2364967e69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=80=90=E6=B5=AA=E4=BA=BA?= Date: Tue, 29 Dec 2020 16:32:05 +0800 Subject: [PATCH] Update JT808EnumExtensions.cs (#20) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改为更直接的方式判断二进制位,808的报警标志位和状态都是uint --- .../Extensions/JT808EnumExtensions.cs | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) 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) {