首页 > 编程语言 >C# 特定byte字符截取字头字尾

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

时间:2023-02-12 18:00:24浏览次数:38  
标签:C# ETX 字头 字尾 byte STX tmpArr

最近在使用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();
        }

 

标签:C#,ETX,字头,字尾,byte,STX,tmpArr
From: https://www.cnblogs.com/Echoxxx/p/17114360.html

相关文章

  • Python 高级编程之网络编程 Socket(六)
    目录一、概述二、Pythonsocket模块1)Socket类型1、创建TCPSocket2、创建UDPSocket2)Socket函数1、服务端socket函数2、客户端socket函数3、公共socket函数三、单工,半......
  • 002:C++类和对象
    1:****范围解析运算符::  类的内部声明函数是内敛函数(inline),  类的外边定义函数,需要在方法名字前面使用类名和范围解析运算费::  调用函数使用.   ......
  • HITCON CTF 2022 SuperPrime
    继续复现HITCONCTF的赛题。争取近期全部复现完。源码chall.pyfromCrypto.Util.numberimportgetPrime,isPrime,bytes_to_longdefgetSuperPrime(nbits):......
  • DNS 系列5 --- DMARC
    一、承上启下1. DNS系列1---记录类型2. DNS系列2---SPF3. DNS系列3---SRV4. DNS系列4---DKIM二、参考https://www.cloudflare.com/learning/dns/dns......
  • C++右值引用与移动语义
    一文看懂C++右值引用和移动语义目录背景什么是右值引用为什么需要右值引用移动构造move的原理move的应用场景右值引用注意事项总结背景C++11......
  • C++中static关键字的作用
    static是什么在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:成员变量,成员函数,普通函数,局部变......
  • ChatGPT介绍、注册使用和应用场景
    ChatGPT介绍ChatGPT是一种由OpenAI开发的大型语言模型,被广泛用于对话生成、问答生成、文本生成等任务。这种模型基于Transformer架构,在训练时使用了大量的文本数据,因此具......
  • [leetcode每日一题]2.12
    ​​1138.字母板上的路径​​难度中等79我们从一块字母板上的位置 ​​(0,0)​​ 出发,该坐标对应的字符为 ​​board[0][0]​​。在本题里,字母板为​​board=["abcde......
  • Linux文件管理命令(4)-cat查看文件内容
     前言    cat主要是用来查看文件内容的,一般也搭配管道符一起来使用,比如有时候要计算文件有多少行或者要截取里面的内容,都还是很实用的。一、cat命令介绍   ......
  • Breaking ECDSA from nonce bits
    如果对HNP不太了解,可以先看一下我的另一篇文章HNPPreview先简单回顾一下HNP和ECDSA。HiddenNumberproblem(HNP):有一个对外保密的数\(\alpha\)和对外公开的模数\(n\)......