读取 mifare 卡块并将其块的一部分与一些文本进行比较

read mifare card block and compare part of its block with some text

我正在使用RC522读取一个Mifare卡块,我在一个块中写了"RhytonUser001"。

Arduino是这样读取的:

byte readbackblock[18];//This array is used for reading out a block. The MIFARE_Read method requires a buffer that is at least 18 bytes to hold the 16 bytes of a block.

for (int j=0 ; j<16 ; j++) //print the block contents
{
    char c = readbackblock[j];
    lcd.print(c);
}

readbackblock[j] 是 returns 来自 card 的 ascii 字符。 我需要将其转换为真正的字符,然后将其转换为字符串,因为我想拆分该字符串。

我也试过这个(没有拆分):

     char d = readbackblock[0] + readbackblock[1] + readbackblock[2] + readbackblock[3] + readbackblock[4] + readbackblock[5];
     if(d == "Rhyton"){
      digitalWrite(7, HIGH);
     } else {
      digitalWrite(6, HIGH); // always this happens
     }

更新:
示例:
在上面的代码中,请想想:
回读块[j] = 082 104 121 116 111 110 085 115 101 114 048 048 049
我可以得到它并将它转换为 char,所以它变成了:RhytonUser001
然后我想拆分它String sth = split(***, 'User');
然后获取 sth[0] 并将其与 Rhyton 进行比较以检查它是否是 Rhyton
但是当我尝试这样做时,我得到了一个错误。 根据 this link 中给出的信息,我无法拆分字符(因为它不是字符串)。那么如何比较 readbackblock[j] 与 Rhyton 或任何其他文本?

您可以通过连接 16 个字符来构建 String 对象。

String strBlock = "";
for (int j=0 ; j<16 ; j++) //print the block contents
{
    char c = readbackblock[j];
    lcd.print(c);
    strBlock += c;
}

然后,你可以使用substring来提取不同的部分。

String strFirst6 = strBlock.substring( 0, 6 );
if ( strFirst6 == "Rhyton" ) {
    ...

注意字符串的实际长度。如果你试图读到最后,这是未定义的行为。上面的代码假设 16 个字符中的 none 将为 0。