Как объединить два значения в строку?

Я перепробовал все предполагаемые решения конкретной ошибки, вставленные в Google, которые смог найти на каждом форуме, включая этот, и независимо от предполагаемого решения, я либо получу ошибку о unsigned int to char*, либо ошибка ниже или неверные указатели.

Почему эта платформа настолько недружелюбна в преобразовании типов данных? Как будто создатели никогда не хотели, чтобы какие-либо типы данных могли конвертироваться.

Вот мой код, который явно бесполезен:

  char* DeviceName = "Device-" +  ESP.getChipId();
  wifiManager.autoConnect(DeviceName);

Ошибка: недопустимое преобразование из «const char*» в «char*» [-fpermissive] char* DeviceName = "Device-" + ESP.getChipId();

Затем я попытался использовать указатели, но понятия не имею, что делаю, и продолжаю получать ошибки недопустимого указателя и/или ошибки недопустимого преобразования.

, 👍0

Обсуждение

Подсказка: попробуйте использовать sprintf(). http://www.cplusplus.com/reference/cstdio/sprintf/, @Mikael Patel

буфер символов [50]; char DeviceName = sprintf(buffer, "Device-%d", ESP.getChipId()); wifiManager.autoConnect (ИмяУстройства);, @Ethan Aaron Vandal

ошибка: недопустимое преобразование из 'char' в 'const char*' [-fpermissive] wifiManager.autoConnect (ИмяУстройства);, @Ethan Aaron Vandal


1 ответ


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

0

Вы можете использовать функцию c sprintf(, , ...) Массив символов должен быть достаточно большим, чтобы вместить ваш текст плюс ноль для завершения строки.

#include <Arduino.h>

void setup() {
  Serial.begin(115200);
  delay(1000);
  char out[20];
  sprintf(out, "Device-%08X",ESP.getChipId()); // %08X\n форматирует шестнадцатеричный код и дополняет его нулями.

  Serial.println(out);
}

void loop() {}

Выход:

Device-005D4D9D
,

Спасибо! Я попробовал это, и он выводит числовой идентификатор, но мне нужен строковый идентификатор. Идентификатор чипа ESP8266 = 005D4D9D <- это должен быть идентификатор... Device-6114717 <- здесь не числовое преобразование, @Ethan Aaron Vandal

Добро пожаловать - полезный пользователь изменил строку формата, чтобы вместо этого выводить 8 шестнадцатеричных цифр, поскольку это то, что вы, похоже, ищете., @SEngstrom

Учиться – это хорошо. Чтобы удалить лишние символы, вы также можете использовать sprintf(out, "Device-%X",ESP.getChipId());, @Ethan Aaron Vandal