C# 特定byte字符截取字头字尾

最近在使用tcp通讯,发现有时候会出现粘包的情况

想个了方法 在报文中添加字头字尾 client接收到byte时候使用特定byte去截取

写了个方法 看明白之后 byte 字符 等相互转换应该会明白一点

  /// <summary>
        /// 移除字头字尾
        /// </summary>
        /// <param name="arr">byte数组</param>
        /// <param name="STX">字头</param>
        /// <param name="ETX">字尾</param>
        /// <returns></returns>
        public static List<byte[]> Split_STX_ETX(byte[] arr, byte STX = 0x02, byte ETX = 0x03)
        {
            var Data = new List<byte[]>();
            var tmpArr = new List<byte>();
            for (int i = 0; i < arr.Length; i++)
            {
                //去掉字头
                if (arr[i] == STX)
                {
                    continue;
                }
                //去掉字尾
                if (arr[i] == ETX)
                {
                    Data.Add(tmpArr.ToArray());
                    tmpArr.Clear();
                    continue;
                }
                tmpArr.Add(arr[i]);
            }
            return Data;

        }

        /// <summary>
        /// 字符串添加字头字尾
        /// </summary>
        /// <param name="str">需要处理的字符串</param>
        /// <param name="STX">字头</param>
        /// <param name="ETX">字尾</param>
        /// <returns></returns>
        public static byte[] Add_STX_ETX(string str, byte STX = 0x02, byte ETX = 0x03)
        {
            var byteArr = Encoding.Default.GetBytes(str);
            var tmpArr = new List<byte>
            {
                STX
            };
            tmpArr.AddRange(byteArr);
            tmpArr.Add(ETX);
            return tmpArr.ToArray();
        }

 

posted @ 2023-02-12 17:54  Echo_xxx  阅读(279)  评论(0编辑  收藏  举报