C#如何删除数组中指定元素?

c#一串数组,{FA,AF,00,03,00,31,31,33,FA,AF,00,02,00,34,35............}
数组长度不固定,首先找到FA,AF为特征值的两个元素,然后删除当前的两个元素以及后面的三个元素,也就是说删除FA,AF,00,03,00和FA,AF,00,02,00,剩下的元素重新生成一个数组。

c#

3个回答

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] arr = { 0xFA, 0xAF, 0x00, 0x03, 0x00, 0x31, 0x31, 0x33, 0xFA, 0xAF, 0x00, 0x02, 0x00, 0x34, 0x35 };
            List<int> toRemove = new List<int>() { };
            bool fa = false;
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == 0xFA) { fa = true; continue; }
                if (arr[i] == 0xAF && fa) { toRemove.AddRange(Enumerable.Range(i - 1, 5)); i += 3; fa = false; };
            }
            arr = arr.Select((x, i) => new { x, i }).Where(x => !toRemove.Contains(x.i)).Select(x => x.x).ToArray();
            Console.WriteLine(string.Join(" ", arr.Select(x => x.ToString("X2"))));
        }
    }
}
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复ccc9149: 什么地方错了
2 年多之前 回复
ccc9149
未知昵称 回复ccc9149: 这个写错了
2 年多之前 回复
ccc9149
未知昵称 回复caozhy: 串口工具,接收到发过来的一串16进制数据,格式如下: FA AF 00 04 FF 31 32 33 34 FA AF 00 02 FF 35 36 后面可能还会有FA AF开头的 这串数据分析如下:识别FA AF为固定开始的头, 紧接着后面的两个00 09为第一个整个字符串实际长度(FA AF 00 08 01 31 32 33 34),FF为固定的数据,不用管。 FF后面对应的数据为实际需要输出显示的数据(31 32 33 34),长度为4,然后这4个数据以正常的,ASCII码显示出来。 第一个(FA AF 00 08 FF 31 32 33 34)实际需要的数据31 32 33 34对应的ASCII码为1234 第二个(FA AF 00 07 FF 35 36)实际需要的数据35 36对应的ASCII码为56 所以串口最终输出在textbox中显示为123456
2 年多之前 回复
ccc9149
未知昵称 回复caozhy: 我试了一下,结果貌似是对的。协议如下::串口工具,接收到发过来的一串16进制数据,格式如下: FA AF 00 04 FF 31 32 33 34 FA AF 00 02 FF 35 36 后面可能还会有FA AF开头的 这串数据分析如下:识别FA AF为固定开始的头, 紧接着后面的两个00 04为第一个整个字符串实际长度(FA AF 00 08 01 31 32 33 34),FF为固定的数据,不用管。 FF后面对应的数据为实际需要输出显示的数据(31 32 33 34),长度为4,然后这4个数据以正常的,ASCII码显示出来。 第一个(FA AF 00 08 FF 31 32 33 34)实际需要的数据31 32 33 34对应的ASCII码为1234 第二个(FA AF 00 07 FF 35 36)实际需要的数据35 36对应的ASCII码为56 所以串口最终输出在textbox中显示为123456
2 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复ccc9149: 如果结果是你想要的,那么就可以。因为不清楚你的协议,没法确定。
2 年多之前 回复
ccc9149
未知昵称 回复showbo: https://ask.csdn.net/questions/688368 我提的这个问题,按我的思路直接删除可行吗?
2 年多之前 回复
showbo
支付宝加好友偷能量挖,胡杨等着我的招呼 正解,采纳这个。。
2 年多之前 回复

你这串数据主要应用于什么场景的?如果是通讯场景,这么用不合适会有大量内存碎片,建议遍历一次,查出并保存FA,AF开头的索引号,通过索引号数量知道了新字符串长度,new byte[]相应长度的数组,再使用Buffer.BlockCopy复制进新数组

ccc9149
未知昵称 可以加QQQQQ聊吗?我的1312289871
2 年多之前 回复

31 31 33 34 35
Press any key to continue . . .

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问