Сопоставление входящих данных с переменной

У меня есть система, в которой можно проверить метку RFID и распечатать ее индивидуальный 4-байтовый UID. Моя задача — проверить, имеют ли последующие теги одинаковый UID, и если нет, вывести «отказано в доступе». Я предполагаю, что мне нужно использовать const char, но я не уверен. Я получаю сообщение об ошибке if (myrfid.serNum[i] == ID) о том, что сравнение между указателями и целыми числами запрещено. Будем признательны за любую ясность, спасибо!

(Код — это только часть цикла for)

void loop()
{
    int i;
    const char ID[] = "111 11 11 11";

    cardpresent = myrfid.isCard();

    if (cardpresent && ! lastcardpresent)
    {
        if (myrfid.readCardSerial())
        {
            for (i = 0; i < 4; i++)
            {
                if (myrfid.serNum[i] == ID)
                {
                    Serial.print("Acess granted ");
                }
                else
                {
                    Serial.print("Acess not granted ");
                }
            }
        }
        Serial.printf("%3d ", myrfid.serNum[i]);
    }
    Serial.print("\n");

    // ...
}

, 👍0


1 ответ


Лучший ответ:

1

Принятый способ инициализации массива в C следует следующему примеру:

const char ID [] = {111, 11, 11, 11};

Подробнее об этом можно прочитать здесь.

Позднее вы будете использовать имя массива ("ID") без индекса ("ID[0]"). Компилятор C предполагает, что программиста, который использует имя массива без индекса, интересует адрес памяти первого элемента массива. Но вам нужно значение в этом месте памяти. Поэтому вы должны использовать имя массива с соответствующим индексом. Предположим, вы намеревались использовать «ID[i]» в приведенном выше фрагменте кода.

,

Ах я вижу. Спасибо за объяснение, исправлены основные проблемы, которые у меня были!, @Zèro

Хороший. Если вы это поняли — добро пожаловать в Программирование на C с помощью указателей. Указатели очень полезны. И, честно говоря, у вас есть преимущество перед многими новичками в программировании на C, если вы понимаете разницу между адресом переменной и значением переменной., @st2000