using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Module.UpsEqm.ModBusTcp { public class BitsConvertUtils { /// /// 得到字节中Bit组合的值,高位在前,低位在后(高字节在数组低索引位,低字节在数组高索引位) /// /// 字节数组 /// 字节位置:数组中第几个字节(从0开始) /// Bit在字节中的位置:第几位(从0开始) /// 字节中位的偏移量 /// 返回字节结果,byte:1,0 public static byte ByteToBitsValue(byte[] data, int byteAddr, int bitStartAddr, int bitOffset) { byte result = 9; if (data.Count() >= (byteAddr + 1)) { byte value = data[byteAddr]; if ((bitStartAddr + bitOffset) <= 8) { byte temp = 0; for (int i = bitStartAddr; i < bitStartAddr + bitOffset; i++) { temp += (byte)(((value >> i & 1)) << (i - bitStartAddr)); } result = temp; } } return result; } /// /// 字节数组转字符串 /// /// /// public static string BytesTostr(byte[] byteDatas) { string strResult = ""; for (int i = 0; i < byteDatas.Length; i++) { try { strResult += Convert.ToChar(byteDatas[i]).ToString() + Convert.ToChar(byteDatas[i + 1]).ToString(); i++; } catch (Exception e) { e.ToString(); } } return strResult; } public static bool GetBitValue(byte value, byte bit) { return (value & (byte)Math.Pow(2, bit)) > 0 ? true : false; } } }