首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要知道如何在每两个字符之间放置一个空格,每次扫描时在文本之间放置一行。

需要知道如何在每两个字符之间放置一个空格,每次扫描时在文本之间放置一行。
EN

Stack Overflow用户
提问于 2017-03-27 10:50:06
回答 1查看 77关注 0票数 0
代码语言:javascript
复制
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 });
        }

上面将数据打印到文本框中。如何每两个字符创建一个空格,并在每次扫描的数据之间留一行。

三次扫描后的当前输出:

00e203027313032180000000605641acff00000000000000e20302731301716606c200001b5ff00000000000000000e203027313000000000001716606c21b5ff000000000

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-27 11:36:54

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

还请注意,应该在循环之后调用myDelegate

代码语言:javascript
复制
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的帮助下,您可以一次性格式化输出字符串:

代码语言:javascript
复制
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(" ", ...)将这个字符串数组连接到一个字符串上,其中的元素由空格分隔。
  • + Environment.NewLine最终确保下一个数据部分将转到一个新的行。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43044356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档