Не получается конвертировать переменную - не знаю как

fsdb
Offline
Зарегистрирован: 24.10.2015
  
Добрый вечер!
не удается конвертировать переменную типа  uint8_t* в тип char * . меня так же устроит если конвертировать так же в String но тоже не получается
пример кода:
интересует переменная msg  и tcp_msg
в msg приходит по TCP/IP текст


  size_t size;

  if (EthernetClient client = server.available())
    {
   
      Serial.println();   
      String tcp_msg;
      while((size = client.available()) > 0)
        {
          uint8_t* msg = (uint8_t*)malloc(size);
          size = client.read(msg,size);
         Serial.write(msg,size);
   //показываю что пришло в переменную msg
   
 
//НЕ ПОЛУЧАЕТСЯ ТУТ   
  char * tcp_msg;
   int i=0;
   while (i<=size-1) {
     tcp_msg+=(char)msg[i];  
     i=i+1;
   }
//НЕ ПОЛУЧАЕТСЯ ТУТ
    

Serial.println(tcp_msg);
   
     
Serial.println();
free(msg);
       
 vw_send((uint8_t *)tcp_msg, strlen(tcp_msg));
vw_wait_tx(); // Wait until the whole message is gone

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Две переменных с именем tcp_msg, это предпосылка к лётному происшествию.
В 24 строке объявлен указатель, но он не проинициализирован, значит пишем фиг знает куда.
В 27 строке Вы просто увеличиваете это указатель, а не пишите в него. Здесь правильней было бы написать *tcp_msg = (char)...; а потом tcp_msg++;
Но сначала нужно выделить память, иначе будет плохо.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Да и что именно Вы подразумеваете под словом "конвертировать" не совсем понятно.

Допустим, у Вас есть число 45, что Вы хотите получить на выходе?

fsdb
Offline
Зарегистрирован: 24.10.2015

andriano - 45 но уже в char

kisoft - спасибо за наводку. буду искать

fsdb
Offline
Зарегистрирован: 24.10.2015

Сделал как вы сказали. получилось но в конце печатается один лишнний символ

если ставлю  char tcp_msg[size-1]; то ардуина зависает и перезагружается

 

 

 

   char  tcp_msg[size];
   int i=0;
   while (i<=size-1) {
     tcp_msg[i]=(char)msg[i];
     i=i+1;
   }
   
   

  Serial.println(tcp_msg);   char  tcp_msg[size];
   int i=0;
   while (i<=size-1) {
     tcp_msg[i]=(char)msg[i];
     i=i+1;
   }
   
   

  Serial.println(tcp_msg);

 

fsdb
Offline
Зарегистрирован: 24.10.2015

cсделал еще вот так и вроде заработало. не знаю правильно ли

   tcp_msg[size]=0;

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Тогда в 10 строке size+1.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

fsdb пишет:

andriano - 45 но уже в char

Т.е. дефис "-"?

Тогда прочто (char*)

fsdb
Offline
Зарегистрирован: 24.10.2015

kisoft у меня цикл последний байт не берет

while (i<=size-1)

поэтому уже +1 не надо

 

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Как угодно

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

kisoft пишет:
Две переменных с именем tcp_msg, это предпосылка к лётному происшествию.

Прошу прощения за оффтоп, но не смог удержаться. Вспомнилась услышанная как то фраза: "Ошибка в типе переменной может привести к задержке в присвоении очередного звания на 6 лет." :)) В оригинале далее следовал пример из жизни.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Duino A.R. пишет:
Вспомнилась услышанная как то фраза: "Ошибка в типе переменной может привести к задержке в присвоении очередного звания на 6 лет." :)) В оригинале далее следовал пример из жизни.

ХААчу пример из жизни!

Что-то слишком круто - 6 лет. Согласно "Положению..." звание считается очередным, только если должность позволяет. А в этом случае трудно представить ситуацию, когда задержка превысит год.

PS. Поиск в гугле по указанной фразе вразумительных результатов не дал.

PPS. Будем считать эту историю частью дидактической работы на форуме.

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

andriano пишет:

ХААчу пример из жизни!

Пример спечифический. Возможно... Как-нибудь...

andriano пишет:

Что-то слишком круто - 6 лет. Согласно "Положению..."

Райвоенкомат г. Н-ска. Райвоенком, прибыв к месту несения  и поднявшись на второй этаж, обнаруживает, что привычной плотной обтюрации его комплекции со стенами коридора мешают офицеры запаса, толпящиеся в коридоре в большом количестве. - Чё вы все в одно время припёрлись? - По повестке. - Ну ка, дайте. У всех к 10-00? - Да. - Кто повестку выписывал? - ...ев. - Он у меня два срока в старших лейтенатах отходил, и еще столько же отходит!!!

Если подсчитать, в сумме реализованного и обещанного это даже больше 6 лет.

andriano пишет:

PS. Поиск в гугле по указанной фразе вразумительных результатов не дал.

Жизнь пока что несколько шире гугля. Мне это фразу в самом начале 80-х произнес один подполковник, по жизни вместо привычного "за...сь" употреблявший слово "супероптимально". Он, будучи еще капитаном, был даже не очевидцем, а непосредственным участником того самого эпизода и через тумблерный регистр сумел вытащить ситуацию. Но это его история, не моя... :))

andriano пишет:

PPS. Будем считать эту историю частью дидактической работы на форуме.

Увидев в тексте такие слова, я обращаюсь к словарю. :))