官方提醒4 2023-03-18 16:29 采纳率: 68.2%
浏览 21
已结题

C#如何截取我要的数据

有一个数据,如何截取我想要的长度 在我判断头帧后 我只想要后面的7位

img

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace Ck
{

    public partial class Form1 : Form
    {
        string timeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        
        private List<byte> buffer = new List<byte>(1024);
        byte[] receiveBuffer = new byte[10];
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load_1(object sender, EventArgs e)
        {
            comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                    button1.Text = "点击打开串口";
                }
                else
                {
                    serialPort1.PortName = comboBox1.Text;
                    serialPort1.Open();
                    button1.Text = "点击关闭串口";
                }
            }
            catch (Exception ex)
            {
                //捕获可能发生的异常并进行处理

                //捕获到异常,创建一个新的对象,之前的不可以再用
                serialPort1 = new System.IO.Ports.SerialPort();
                //刷新COM口选项
                comboBox1.Items.Clear();
                comboBox1.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
                //响铃并显示异常给用户
                System.Media.SystemSounds.Beep.Play();
                button1.Text = "打开串口";
                button1.BackColor = Color.ForestGreen;
                MessageBox.Show(ex.Message);
            }

        }

        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string abc;
            // 检查是否允许跨线程调用控件,这里为了简化代码直接禁用了该功能
            CheckForIllegalCrossThreadCalls = false;


            // 读取所有可用字节数
            int bytesToRead = serialPort1.BytesToRead;

            //用于存储接收到的数据
            byte[] receiveBuffer = new byte[bytesToRead];

            //从串口读取数据
            serialPort1.Read(receiveBuffer, 0, bytesToRead);
            buffer.AddRange(receiveBuffer);
            //将接收到的数据转换为字符串格式
            string receivedString = BitConverter.ToString(receiveBuffer).Replace("-", "");
            //将字符串追加至文本框中
            if (buffer[0] ==0x68)
            {

                StreamWriter sw = new StreamWriter(@"C:\Users\guoxiaoru\Desktop\ACVB.txt", true);
                sw.WriteLine(receivedString, "\n");
                sw.Close(); 
                
            }

        }  
    }
}


  • 写回答

2条回答 默认 最新

  • 文盲老顾 WEB应用领新星创作者 2023-03-18 16:45
    关注

    你不是已经有 byte 数组了吗?直接 byte[byte.Length - 7] 循环到 byte.Length 组一个新数组就可以了

    或者,你写入的时候, write(byte,byte.Length -7,7)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab