我有以下问题:
我从串口读取,输出非常奇怪。
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Text.RegularExpressions;
using System.Globalization;
namespace SerialPort_Test
{
class Program
{
static SerialPort mySerialPort;
static void Main(string[] args)
{
mySerialPort = new SerialPort("COM3", 19200, Parity.Even, 7, StopBits.One);
//mySerialPort = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
mySerialPort.RtsEnable = true;
mySerialPort.Open();
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(mySerialPort_DataReceived);
while (true)
{
Console.ReadLine();
}
}
public static string clean(string s)
{
string ss = "";
//s = string.Join("", Regex.Split(s, "(ID|I<|P<|V<|VI)").Skip(1));
char[] arr = s.ToCharArray();
char[] db = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P','Q','R','S','T','U','V','X','Y','Z','<','|','0','1','2','3','4','5','6',
'7','8','9'};
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < db.Length; j++)
{
if (arr[i] == db[j])
{
ss += arr[i];
}
}
}
return ss;
}
private static void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string s = clean(mySerialPort.ReadExisting().Replace("\r", "|"));
Console.WriteLine(s);
}
}
}
我的设备是使用虚拟配件连接到USB端口的ID / Passport读卡器我可以获取数据但是它不一致。
当我第一次刷我的身份证时,我得到一个输出,即 (实施例)
IDROU745357465&LT;&LT;&LT;&LT;&LT;&LT;&LT;&LT; | 424762M46278738753753 | ILI&LT;
但问题是这应该只有1行。
当我再次滑动时,我会得到一个非常不同的结果,每次下一张幻灯片都会有所不同
第二次例子:
我DR OU
7 4535 7465&lt;&lt;&lt;&lt; &LT;&LT; &LT; &LT; | 424 76 2M 46278 73 8 75375 3 | I LI&lt; &LT; L A Z&lt; V K GHJDK&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; |
请考虑空格换行符,因为它们显示为新行!
没有模式。我想将所有缓冲的字节放入一个字符串中。当我不使用
时WriteLine();
似乎没关系,我把它放在一条线上,但我不想这样,我需要使用
WriteLine();
并在每次刷卡时获得一致的输出。
感谢您的任何建议。
此致 Iliali