using JiShe.CollectBus.Common.Extensions; using JiShe.CollectBus.Protocol.Interfaces; namespace JiShe.CollectBus.Protocol.AnalysisData.Appendix { public class Appendix_A23 : IAnalysisStrategy, decimal> { public async Task ExecuteAsync(List data) { decimal value = 0.000M; if (data[0].Check3761Byte()) value += GetValue(0, 4, 1000M, 4, 4, 10000M, data[0], 1); if (data[1].Check3761Byte()) value += GetValue(0, 4, 10M, 4, 4, 100M, data[1], 1); if (data[2].Check3761Byte()) value += GetValue(0, 4, 10M, 4, 4, 1M, data[2], 0); return await Task.FromResult(value); } /// /// 解析值 /// /// 二进制低位字符串截取位置 /// 截取长度 /// 分位值,1000M /// 二进制高位字符串截取位置 /// 截取长度 /// 分位值,100M /// 数据 /// 计算类型,0:乘法,1:除法 /// private decimal GetValue(int startIndex, int startLength, decimal startQuantile, int endIndex, int endLength, decimal endQuantile, string data, int calType = 0) { var value = 0M; string binString = data.HexTo4BinZero(); switch (calType) { case 0: value = (binString.Substring(startIndex, startLength).BinToDec() * startQuantile) + (binString.Substring(endIndex, endLength).BinToDec() * endQuantile); break; case 1: value = (binString.Substring(startIndex, startLength).BinToDec() / startQuantile) + (binString.Substring(endIndex, endLength).BinToDec() / endQuantile); break; } return value; } } }