Преобразование типов byte в string
- Войдите на сайт для отправки комментариев
Пт, 28/08/2015 - 09:22
Помогите с преобразованием типов данных.
Есть массив байтов {0x30, 0x31,0x32}
Как из этого массива получить строку "012"
Помогите с преобразованием типов данных.
Есть массив байтов {0x30, 0x31,0x32}
Как из этого массива получить строку "012"
byte str[] = {0x30,0x31,0x32,0x00}; Serial.begin(9600); Serial.println("test"); Serial.println((char*)str);Как то так - строки заканчиваются 0х00 и можно преобразовать простым приведением типов.
String myString = String((char*)byteArray);
Мне ее в порт не надо. Я делал
Но на экране какая то фигня. Хотя если просто текст в кавычках написать но нормально все отобрадается.
А так же просто, но наоборот можно, как то?
А так же просто, но наоборот можно, как то?
есть такая замечательная функция
char *itoa(int val, char *s, int radix)
преобразовывает int в строку. radix - основание системы счисления, 2, 10 или 16.
#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}; 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*
Возможно, кому-нибудь пригодится.
Это не компилятор, это Си и все подобные языки.
Компилятор просто делает то, что обязан по стандарту.
И, кстати, не "конец char*", а "конец Си-строки". У указателя не может быть конца.
PS. И, кстати, ответ на вопрос был уже в первом сообщении темы.