Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将rfid的标签号拆分为整数?_C#_Arduino_Rfid - Fatal编程技术网

C# 如何将rfid的标签号拆分为整数?

C# 如何将rfid的标签号拆分为整数?,c#,arduino,rfid,C#,Arduino,Rfid,我是通过读卡片来获得信息的,但是我怎么才能把标签号取为int呢 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { if (!serialPort1.IsOpen) { se

我是通过读卡片来获得信息的,但是我怎么才能把标签号取为int呢

        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以获取建议。我编辑了代码,但现在它给出了“对象引用未设置为对象实例”错误。你有主意吗?适当的调试会有帮助的。这意味着某个对象没有被引用