Что означают эти строки в коде считывателя RFID-карт UID?

Сейчас я работаю над проектом с использованием RFID. Мне интересно, как работают эти строки кода. Я знаю, что это как-то связано с получением UID отсканированной/поднесенной карты, но может ли кто-нибудь объяснить или подробно рассказать мне о каждой строке, как она выполняется? Большое спасибо.

  String ID = "";
  for (byte i = 0; i < 4; i ++) {
    ID += (rfid.uid.uidByte[i] < 0x10 ? "0" : "")
          + String(rfid.uid.uidByte[i], HEX)
          + (i != 3 ? ":" : "" );
  }

, 👍0

Обсуждение

какую часть кода вы понимаете? .... какую часть кода вы не понимаете?, @jsotola

Мне сложно понять 4-ю и 6-ю строки этой конкретной части, так что это операторы. Большое спасибо за разъяснения., @A. Raymundo

это тернарные операторы .... функция print() получит одну из двух строк в зависимости от результата логической проверки print( 1<2 ? "это правда" : "это не правда") .... print( 1>2 ? "это правда" : "это не правда") ..... первая выведет "это правда" .... вторая выведет "это не правда", @jsotola


1 ответ


3

Код форматирует UUID как строку из 4 шестнадцатеричных байтов (каждый байт — пара шестнадцатеричных цифр), разделенных двоеточиями.

String ID = ""

Очистить строку

for (byte i = 0; i < 4; i ++){

Выполнить итерацию по четырем байтам UUID

  ID +=

Добавьте следующее к строке «ID»

(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +

Если шестнадцатеричное число, которое должно быть отображено, меньше 0x10, добавьте ведущий '0' к строке 'ID'. Это гарантирует, что все UUID выровнены, и все байты в UUID отображаются как две шестнадцатеричные цифры (даже если нужна только одна). Он использует тернарный оператор условия, который является компактным if/then/else, который может возвращать только одно из двух значений (а не выполнять фрагменты кода). Подробнее об операторе тернарного условия см. https://en.wikipedia.org/wiki/%3F:.

 String(rfid.uid.uidByte[i], HEX) +

Добавьте UUID к строке «ID» в формате HEX.

   (i != 3 ? ":" : "" );

Еще один пример оператора тернарного условия. Этот добавляет двоеточие к строке 'ID' после шестнадцатеричного байта, если только индекс не равен 3 (т.е. последний).

 }

Конец цикла for. Это означает, что результатом будет nn:nn:nn:nn вместо nn:nn:n:nn: (без двоеточия в конце и различного количества шестнадцатеричных цифр).

,

Спасибо вам, ребята, за то, что вы мне это объяснили. Я это очень ценю. :), @A. Raymundo