创意电子

标题: 给大家分享一个我经常使用的类「含源码」 [打印本页]

作者: dotNet工控上位机    时间: 2022-3-7 17:24
标题: 给大家分享一个我经常使用的类「含源码」
前言

今天跟大家分享一个我自己封装,而且经常使用的类,话不多说,直接看源码。
源码

    ///     /// 字节集合类    ///     public class ByteArray    {        ///         /// 初始化一个List集合对象        ///         private List list = new List();        ///         /// 通过索引获取值        ///         /// 索引        /// 返回字节        public byte this[int index]        {            get => list[index];            set => list[index] = value;        }        ///         /// 返回长度        ///         public int Length => list.Count;        ///         /// 通过属性返回字节数组        ///         public byte[] array        {            get { return list.ToArray(); }        }        ///         /// 清空字节数组        ///         public void Clear()        {            list.Clear();        }        ///         /// 添加一个字节        ///         /// 字节        public void Add(byte item)        {            list.Add(item);        }        ///         /// 添加一个字节数组        ///         /// 字节数组        public void Add(byte[] items)        {            list.AddRange(items);        }        ///         /// 添加二个字节        ///         /// 字节        public void Add(byte item1, byte item2)        {            Add(new byte[] { item1, item2 });        }        ///         /// 添加三个字节        ///         /// 字节        public void Add(byte item1, byte item2, byte item3)        {            Add(new byte[] { item1, item2, item3 });        }        ///         /// 添加四个字节        ///         /// 字节        public void Add(byte item1, byte item2, byte item3, byte item4)        {            Add(new byte[] { item1, item2, item3, item4 });        }        ///         /// 添加五个字节        ///         /// 字节        public void Add(byte item1, byte item2, byte item3, byte item4, byte item5)        {            Add(new byte[] { item1, item2, item3, item4, item5 });        }        ///         /// 添加一个ByteArray对象        ///         /// ByteArray对象        public void Add(ByteArray byteArray)        {            list.AddRange(byteArray.array);        }        public void Insert(int index, byte item)        {            list.Insert(index,item);        }        public void Insert(int index, byte[] item)        {            for (int i = 0; i < item.Length; i++)            {                list.Insert(index + i, item);            }        }        ///         /// 添加一个ushort类型数值        ///         /// ushort类型数值        /// 字节序        public void Add(ushort value,DataFormat dataFormat)        {            byte[] data = BitConverter.GetBytes(value);            byte[] result = new byte[data.Length];            switch (dataFormat)            {                case DataFormat.ABCD:                case DataFormat.CDAB:                    result[0] = data[1];                    result[1] = data[0];                    break;                case DataFormat.BADC:                case DataFormat.DCBA:                    result[0] = data[0];                    result[1] = data[1];                    break;                default:                    break;            }            Add(result);        }        ///         /// 添加一个short类型数值        ///         /// short类型数值        /// 字节序        public void Add(short value, DataFormat dataFormat)        {            byte[] data = BitConverter.GetBytes(value);            byte[] result = new byte[data.Length];            switch (dataFormat)            {                case DataFormat.ABCD:                case DataFormat.CDAB:                    result[0] = data[1];                    result[1] = data[0];                    break;                case DataFormat.BADC:                case DataFormat.DCBA:                    result[0] = data[0];                    result[1] = data[1];                    break;                default:                    break;            }            Add(result);        }        ///         /// 添加一个ushort类型数值        ///         /// ushort类型数值        /// 字节序        public void Insert(int index, ushort value, DataFormat dataFormat)        {            byte[] data = BitConverter.GetBytes(value);            byte[] result = new byte[data.Length];            switch (dataFormat)            {                case DataFormat.ABCD:                case DataFormat.CDAB:                    result[0] = data[1];                    result[1] = data[0];                    break;                case DataFormat.BADC:                case DataFormat.DCBA:                    result[0] = data[0];                    result[1] = data[1];                    break;                default:                    break;            }            Insert(index, result);        }        ///         /// 添加一个short类型数值        ///         /// short类型数值        /// 字节序        public void Insert(int index, short value, DataFormat dataFormat)        {            byte[] data = BitConverter.GetBytes(value);            byte[] result = new byte[data.Length];            switch (dataFormat)            {                case DataFormat.ABCD:                case DataFormat.CDAB:                    result[0] = data[1];                    result[1] = data[0];                    break;                case DataFormat.BADC:                case DataFormat.DCBA:                    result[0] = data[0];                    result[1] = data[1];                    break;                default:                    break;            }            Insert(index, result);        }    }分析

这个类其实是对List集合的二次封装,但是会比集合增加了更多的功能,实际使用的时候代码也会比集合要简洁一些。
具体好不好用,用了就知道!
给大家看一个实际应用场景。
        ///         /// 根据起始地址及长度,确定读取协议帧        ///         /// 起始地址        /// 长度        /// 协议帧数据        public  virtual OperateResult BuildReadMessageFrame(string address, ushort length)        {            var result = MelsecHelper.MelsecAddressAnalysis(address, IsFx5U);            if (!result.IsSuccess) return OperateResult.CreateFailResult(result);            //创建ByteArray对象            ByteArray sendCommand = new ByteArray();            // 副头部            sendCommand.Add(0x50, 0x00);            // 网络编号            sendCommand.Add(NetworkNo);            // 可编程控制器编号            sendCommand.Add(0xFF);            // 哀求目标模块I/O编号            sendCommand.Add(0xFF, 0x03);            // 哀求目标模块站号            sendCommand.Add(DstModuleNo);            // 哀求数据长度            sendCommand.Add(0x0C, 0x00);            // CPU监视定时器            sendCommand.Add(0x0A, 0x00);            // 指令            sendCommand.Add(0x01, 0x04);            // 子指令            sendCommand.Add(result.Content1.AreaType, 0x00);            // 起始软元件            byte[] startAddress = BitConverter.GetBytes(result.Content2);            sendCommand.Add(startAddress[0], startAddress[1], startAddress[2]);            // 软元件代码            sendCommand.Add(result.Content1.AreaBinaryCode);            // 软元件点数            sendCommand.Add((byte)(length % 256), (byte)(length / 256));            return OperateResult.CreateSuccessResult(sendCommand.array);        }我是新阁上位机付老师,用我的专业,成就你的空想!
作者: 天马行空枕上书    时间: 2022-3-7 18:30
转发了
作者: 天马行空枕上书    时间: 2022-3-7 18:31
js还是c#呀
作者: ywwj521    时间: 2022-3-7 23:51
转发了
作者: Jonathan999    时间: 2022-3-8 07:48
转发了
作者: 2oI8知足常乐吧    时间: 2022-3-8 07:57
转发了
作者: 子口    时间: 2022-3-8 08:09
转发了
作者: 与风相随913    时间: 2022-3-8 17:04
转发了




欢迎光临 创意电子 (https://wxcydz.cc/) Powered by Discuz! X3.4