需要知道如何在每次扫描时在每两个字符之间放置一个 space 并在文本之间放置一行

Need to know how to put a space between every two characters and a line between the text each time I scan

public partial class Form1 : Form
    {
        public delegate void AddDataDelegate(String myString);
        public AddDataDelegate myDelegate;
        string[] Tags;
        public Form1()
        {
            InitializeComponent();

            SerialPort RFID = new SerialPort();
            RFID.PortName = "COM5";
            RFID.BaudRate = 9600;
            RFID.DataBits = 8;
            RFID.Parity = Parity.None;
            RFID.StopBits = StopBits.One;
            RFID.Open();
            RFID.DataReceived += new        SerialDataReceivedEventHandler(RFID_DataReceived);
            this.myDelegate = new AddDataDelegate(AddDataMethod);
        }

        public void AddDataMethod(String myString)
        {
            textBox1.AppendText(myString);
        }
        public void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort RFID = (SerialPort)sender;
            int buffer = RFID.ReadBufferSize;
            byte[] data = new byte[buffer];
            RFID.Read(data, 0, buffer);
            string s;
            for (int i = 0; i < 18; i++)
            {
                s = Convert.ToString(data[i], 16);
                //Console.WriteLine(Convert.ToString(data[i], 16));
                textBox1.Invoke(this.myDelegate, new Object[] { s });
            }
            //Console.WriteLine(Convert.ToString(i,16));
            //textBox1.Invoke(this.myDelegate, new Object[] { s });
        }

以上将数据打印到文本框。如何每两个字符创建一个 space 并在每次扫描的数据之间留一条线。

三次扫描后的当前输出:

00e203027313032180000000605641acff00000000000000e20302731301716606c200001b5ff0000000000000000e20302731300000000000171=606ff6c20[]

您可以在每个转换后的字节后附加一个 space,并在转换整个缓冲区后附加一个新行 (Environment.NewLine)。

另请注意,myDelegate 应在循环后调用:

public void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort RFID = (SerialPort)sender;
    int buffer = RFID.ReadBufferSize;
    byte[] data = new byte[buffer];
    RFID.Read(data, 0, buffer);
    string s = "";
    for (int i = 0; i < 18; i++)
    {
        s += Convert.ToString(data[i], 16) + " ";
    }
    s += Environment.NewLine;
    textBox1.Invoke(this.myDelegate, new Object[] { s });
}

备选方案:

借助 LINQ 的一点帮助,您可以一次性格式化输出字符串:

public void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort RFID = (SerialPort)sender;
    int buffer = RFID.ReadBufferSize;
    byte[] data = new byte[buffer];
    RFID.Read(data, 0, buffer);

    string s =  string.Join(" ", data.Select(b => b.ToString("x2"))) + Environment.NewLine;

    textBox1.Invoke(this.myDelegate, new Object[] { s });
}

在哪里

  • data.Select(b => b.ToString("x2")) 使用 x2 格式将字节数组转换为字节字符串表示的数组。
  • string.Join(" ", ...) 将这个字符串数组连接成一个字符串,其中的元素由 space
  • 分隔
  • + Environment.NewLine 最终确保下一个数据部分将换行。