Как преобразовать массив байтов в одну переменную

В этом коде я беру данные TID (20 байт по 160 бит) в виде массива в соответствии с документацией, и они работают правильно и получают выходные данные RFID-тегов.

Теперь мне просто нужно ваше руководство: как мне преобразовать массив из 20 байт в одну переменную или в тип данных двойной длины? или другие. Потому что мне нужно отправить его на сервер базы данных MySQL для дальнейшей обработки.

Я попробовал следующий код, который работает нормально

byte x[10] = "450210921";
long result = atol(x);
Serial.print("long value of the byte is: ");
Serial.println(result);

но когда я помещаю приведенный выше код в свой основной код, не получаю никаких ошибок и не получаю требуемого вывода.!

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  byte response;
  byte myTID[20]; //TID составляют 20 байт
  byte tidLength = sizeof(myTID);

  //Читаем уникальный идентификатор тега
  response = nano.readTID(myTID, tidLength);
  if (response == RESPONSE_SUCCESS)
  {
    for(byte x = 0 ; x < tidLength ; x++)
    {
      if(myTID[x] < 0x10) Serial.print("0");
      /*temp[x]=(myTID[x], HEX);*/
      //Заменяем значения во временную переменную
      temp[x]=myTID[x];  
      Serial.print(temp[x]);
    }
    /*byte x[10] = "450210921";*/
    //Преобразуем весь массив в одну длинную переменную
    long result = atol(temp);
    Serial.print("long value of the byte is: ");
    Serial.println(result);
  }
  else
    Serial.println("Failed read");
}

, 👍1


1 ответ


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

0

Вы не можете преобразовать 20 байт в длинные. Отправьте его как строку шестнадцатеричных значений. Байт занимает два шестнадцатеричных символа, поэтому вы отправите строку из 40 символов, которую можно просто декодировать обратно в байты.

char str[sizeof(myTID) * 2 + 1];
const char* hex = "0123456789ABCDEF";
for (int i = 0; i < sizeof(myTID); i++) {
  str[i * 2] = hex[(myTID[i] >> 4)];
  str[i * 2 + 1] = hex[(myTID[i] & 0x0F)];
}
str[sizeof(str)] = 0;
Serial.println(str);
,