C# 如何将rfid的标签号拆分为整数?
我是通过读卡片来获得信息的,但是我怎么才能把标签号取为int呢C# 如何将rfid的标签号拆分为整数?,c#,arduino,rfid,C#,Arduino,Rfid,我是通过读卡片来获得信息的,但是我怎么才能把标签号取为int呢 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { if (!serialPort1.IsOpen) { se
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
serialPort1.Open();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
MessageBox.Show("Success");
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
textRFID.Text += indata;
}
这是我需要解析的字符串:
"RFID tag detected Tag Type:\tMifare One (S50) The tag's number is:\t235717311 Read Checksum:\t238 Calculated Checksum:\t238"
多亏了@haldo,我可以收到我的标签号,但它给出了“对象引用未设置为对象实例”错误,我把try-catch放在上面,当我按ok键出错时,它就会转到我想要的输出。我们如何删除此错误
这是我的编辑代码:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
string contains = "The tag's number is:";
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
int tagNumber = 0;
try
{
indata.Split(Environment.NewLine.ToCharArray()) // split on newline chars
.FirstOrDefault(s => s.Contains(contains)) // get first string matching pattern above
.Split(':') // split on ':'
.FirstOrDefault(x => int.TryParse(x, out tagNumber)); // return first successful try parse
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
textRFID.Text = tagNumber.ToString();
}
为什么不使用字符串操纵器,如
Substring
或String.split(“”)
。您将获得标签号
,然后使用Convert.ToInt(此处为您的标签号)
将其转换为INT
。默认情况下,它是字符串
。您需要将其转换为整数
为什么不使用字符串操纵器,如子字符串
或字符串.split(“”)
。您将获得标签号
,然后使用Convert.ToInt(此处为您的标签号)
将其转换为INT
。默认情况下,它是字符串
。您需要将其转换为整数。您可以使用正则表达式查找模式并捕获“标记的编号为:”后的一组数字,然后将捕获的字符串解析为整数。类似如下:
string pattern = "The tag's number is:(\\d+)";
string indata = "blah blah \nasdfasdfasdf\nThe tag's number is:123389882\nasdfsadf\nfgjdjgjgd";
var matches = Regex.Match(indata, pattern);
int? tagNumber = null;
if (matches.Success)
{
var grp = matches.Groups[1];
string num = grp.Value;
tagNumber = int.Parse(num);
}
// tagNumber is 123389882
您可以使用正则表达式查找模式并捕获“标记的编号为:”后的一组数字,然后将捕获的字符串解析为int。类似如下:
string pattern = "The tag's number is:(\\d+)";
string indata = "blah blah \nasdfasdfasdf\nThe tag's number is:123389882\nasdfsadf\nfgjdjgjgd";
var matches = Regex.Match(indata, pattern);
int? tagNumber = null;
if (matches.Success)
{
var grp = matches.Groups[1];
string num = grp.Value;
tagNumber = int.Parse(num);
}
// tagNumber is 123389882
您可以使用regex查找模式并捕获“标记的编号为:”后的数字组,然后将捕获的字符串解析为int。您可以使用regex查找模式并捕获“标记的编号为:”后的数字组,然后将捕获的字符串解析为int。谢谢您的建议。我编辑了代码,但现在它给出了“对象引用未设置为对象实例”错误。你有主意吗?适当的调试会有帮助的。这意味着某个对象没有被引用到Hanks以获取建议。我编辑了代码,但现在它给出了“对象引用未设置为对象实例”错误。你有主意吗?适当的调试会有帮助的。这意味着某个对象没有被引用