需要知道如何在每次扫描时在每两个字符之间放置一个 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
最终确保下一个数据部分将换行。
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
最终确保下一个数据部分将换行。