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
发布于 2017-03-27 11:36:54
您可以在每个转换的字节之后追加一个空格,并在转换完整个缓冲区后追加一个新行(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(" ", ...)将这个字符串数组连接到一个字符串上,其中的元素由空格分隔。+ Environment.NewLine最终确保下一个数据部分将转到一个新的行。https://stackoverflow.com/questions/43044356
复制相似问题