Преобразование типов byte в string

egorka39
Offline
Зарегистрирован: 16.08.2015

Помогите с преобразованием типов данных.

Есть массив байтов {0x30, 0x31,0x32}

Как из этого массива получить строку "012"

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013
  byte str[] = {0x30,0x31,0x32,0x00};
  Serial.begin(9600);
  Serial.println("test");
  Serial.println((char*)str);

Как то так -  строки заканчиваются 0х00 и можно преобразовать простым приведением типов.

Araris
Offline
Зарегистрирован: 09.11.2012

String myString = String((char*)byteArray);

egorka39
Offline
Зарегистрирован: 16.08.2015

Мне ее в порт не надо. Я делал 

String str1 = ((char*)str);
lcd.print(str1);

Но на экране какая то фигня. Хотя если просто текст в кавычках написать но нормально все отобрадается.

Araris
Offline
Зарегистрирован: 09.11.2012
String str1 = String((char*)str);

 

sav liana
Offline
Зарегистрирован: 28.11.2016

А так же просто, но наоборот можно, как то?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sav liana пишет:

А так же просто, но наоборот можно, как то?

есть такая замечательная функция 

char *itoa(int val, char *s, int radix)

преобразовывает int в строку.  radix - основание системы счисления, 2, 10 или 16. 

SIR
SIR аватар
Offline
Зарегистрирован: 07.11.2016

#include <SoftwareSerial.h>
  long int SpeedRXTX = 19200; 
  byte Massiv[] = {0x32, 0x32, 0x33, 0x33, 0x30, 0x31,  0x32, 0x32, 0x32};
  byte Massiv2[] = {0x30, 0x31, 0x32};

void setup() 
{
  Serial.begin(SpeedRXTX);
}
void loop()
{
 Serial.println((char*)Massiv);
 Serial.println((char*)Massiv2);
 delay (1000);
}
 

Если запустить этот код, то в терминале увидим повторяющиеся:

223301222

012223301222

А должно быть:

223301222

012

Это глюк компилятора или моя ошибка?

SIR
SIR аватар
Offline
Зарегистрирован: 07.11.2016

SIR пишет:


#include <SoftwareSerial.h>
  long int SpeedRXTX = 19200; 
  byte Massiv[] = {0x32, 0x32, 0x33, 0x33, 0x30, 0x31,  0x32, 0x32, 0x32};
  byte Massiv2[] = {0x30, 0x31, 0x32};

void setup() 
{
  Serial.begin(SpeedRXTX);
}
void loop()
{
 Serial.println((char*)Massiv);
 Serial.println((char*)Massiv2);
 delay (1000);
}
 

Если запустить этот код, то в терминале увидим повторяющиеся:

223301222

012223301222

А должно быть:

223301222

012

Это глюк компилятора или моя ошибка?

Вот лечение.


#include <SoftwareSerial.h>
  long int SpeedRXTX = 19200; 
  byte Massiv[] = {0x32, 0x32, 0x33, 0x33, 0x30, 0x31,  0x32, 0x32, 0x32, 0x00};
  byte Massiv2[] = {0x30, 0x31, 0x32, 0x00};

void setup() 
{
  Serial.begin(SpeedRXTX);
}
void loop()
{
   Serial.println((char*)Massiv2);
 Serial.println((char*)Massiv);

 delay (1000);
}

В конце каждого массива необходимо добавить ноль. Так компилятор понимает конец char*

Возможно, кому-нибудь пригодится.

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

Это не компилятор, это Си и все подобные языки. 

Компилятор просто делает то, что обязан по стандарту.

И, кстати, не "конец char*", а "конец Си-строки". У указателя не может быть конца.

 

PS. И, кстати, ответ на вопрос был уже в первом сообщении темы.