Как я могу присвоить значение массива символов массиву uint8_t?

У меня есть переменная массива символов, которая имеет значение. Мне нужно отправить это значение через LoRa. Библиотека, которую я использую для реализации LoRa, принимает массив uint8_t. Как я могу передать значение char[] в переменную uint8_t[] (и наоборот)?

if (Udp.parsePacket()) {
  int udp_received = Udp.available();
  char udp_buffer[udp_received + 1];
  Udp.read(udp_buffer, udp_received);
  udp_buffer[udp_received] = '\0';

  uint8_t udp_to_lora[] = "???";
  rf95.send(udp_to_lora, sizeof(udp_to_lora));
  rf95.waitPacketSent();

}

Мне нужно передать udp_buffer в uint8_t udp_to_lora[].

, 👍0


1 ответ


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

0

У меня нет под рукой компилятора, но вы можете привести массив к типу char и uint8_t, похожих по размеру:

rf95.send((char*) udp_to_lora, sizeof(udp_to_lora));
,

Как это могло быть так просто? Спасибо! Но помогите мне понять. Какова цель звездочки разыменования в этом приведении?, @BrainTrance

То же самое наоборот: rf95.send((uint8_t*)udp_buffer, udp_received);, @DataFiddler

char — это символ, char * — это УКАЗАТЕЛЬ на символ. Однако массив символов — это то же самое, так как он указывает на первый символ текста., @Michel Keijzers

«Какова цель звездочки разыменования в этом приведении?» Это в контексте. В спецификации типа (которой является приведение) "*" является частью типа, где он означает "указатель на". В значении это оператор разыменования и означает «значение того, на что [вещь] указывает», или, более буквально, «значение, содержащееся в ячейке памяти, адрес которой является значением [вещи]». Расположение во множественном числе, потому что память Arduino, адресуемая по байтам, большинство переменных являются многобайтовыми., @JRobert

разыменование равно *a, @Juraj