byte[] data = new byte[] { 0xf2, 0x7d, 0xf2, 0x7d, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0xeb, 0xeb, 0xb7, 0xeb, 0xeb, 0xb7, 0xeb, 0xb7, 0xf2, 0x7d, 0xf2, 0x7d, 32, 23, 43, 54, 0xeb, 0xb7, 0xeb, 0xb7, 0xf2, 0x7d, 0xf2, 0x7d, 12, 0xeb, 0xb7, 0xeb, 0xb7 };byte[] headbyte=new byte[]{ 0xf2, 0x7d, 0xf2, 0x7d,};//帧头
byte[] endbyte=new byte[]{ 0xeb, 0xb7, 0xeb, 0xb7,};//帧尾int numh=headbyte.Length;
int nume=endbytee.Length;List<byte[]> list = new List<byte[]>();
List<byte> section = new List<byte>();
int flag = 0;
int index = 0;List<byte> section = new List<byte>();MemoryStream   s   =   new   MemoryStream(); 
foreach ( byte b in data )

head:
if ( b == (byte) 0 && flag==0){
if(s.Read(data,b,num).Equals(headbyte))
{
flag=1;
section.Add( b );
}
}     .
     .
     .end :
if ( b == (byte) 0 && flag==1){
if(s.Read(data,b,num).Equals(endbyte))
{
flag=0;
section.Add( b );
}
}
      .
      .
      .
}
-----------------------------------
根据 Ivony(授人以鱼不如授人以渔,上海谋生) ( ) 信(http://community.csdn.net/Expert/TopicView3.asp?id=5417435
)改的不知道能用不  主要是匹配方式改了下提供下思路: 不用象Ivony(授人以鱼不如授人以渔,上海谋生) ( ) 信那样 挨个比较
0xf2, 0x7d, 0xf2, 0x7d是帧头,0xeb, 0xb7, 0xeb, 0xb7是帧尾 是固定匹配的就整体比较;
就是 帧头→帧头、帧尾 →帧尾 、帧尾→帧头几种情况怎么处理机制 看你怎么设置了。
 flag 也是标志位

解决方案 »

  1.   

    可以把byte[]看成Ascii编码的字符串来处理byte[] data = new byte[] { 0x12, 0xf2, 0x7d, 0xf2, 0x7d, 0x01, 0x02, 
        0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0xeb, 0xb7, 0xeb, 
        0xb7, 0xf2, 0x7d, 0xf2, 0x7d, 0x12, 0x12, 0x23, 0x32, 0x31, };
    byte[] startBytes = new byte[] { 0xf2, 0x7d, 0xf2, 0x7d, }; //帧头
    byte[] endBytes = new byte[] { 0xeb, 0xb7, 0xeb, 0xb7, }; //帧尾int i = Encoding.ASCII.GetString(data).IndexOf(
        Encoding.ASCII.GetString(startBytes));
    if (i < 0) return;
    int j = Encoding.ASCII.GetString(data, i,
        data.Length - i).IndexOf(Encoding.ASCII.GetString(endBytes));
    if (j < 0) return;textBox1.Text = BitConverter.ToString(data, i, i + j + endBytes.Length - 1);