Преобразовать sTring в byte?
- Войдите на сайт для отправки комментариев
Втр, 05/03/2019 - 08:45
Получаю от библиотеки MQTT текстовое (String) значение 00000101 в переменной payload. Как мне записать его в byte, что бы получилось число 5?
Вот такой код почему то не работает. В цикле for в массиве temp почему то только единицы...
if (topic == "/md/infobyte") {
bool temp[8];
byte finish_byte;
for (byte i = 0; i <= 7; i++){
if (payload.charAt(i)=="0")
{temp[i]=0;}
else
{temp[i]=1;}
bitWrite(finish_byte, i, temp[i]);}
Serial.print(finish_byte);
}
"0" - это не char, а char[]. При использовании char используются одинарные кавычки.
"0" - это не char, а char[]. При использовании char используются одинарные кавычки.
Это первая серия. Но сериал имеет и продолжение :)
Спасибо. Получилось.
Это первая серия. Но сериал имеет и продолжение :)
Мне кажется, что не сериал, а гораздо хуже - непрекращающийся День Сурка.
Немногим лучше
int binStrToInt(String &input) { int result = 0; for (byte i = 0; i < input.length(); i++) { result <<= 1; if (input[i] == '1') result |= 1; else if (input[i] != '0'){ result>>=1; break; } } return result; }Получилось, но будут неожиданные, ниоткуда появляющиеся глюки. Думайте, почему.
не придумывается =( говорите, не таите знания ;)
Нули он тоже пихает... просто форматирование кода кривое.
Нули он тоже пихает... просто форматирование кода кривое.
Виноват, не заметил. Удаляю свой пост.
int binStrToInt(String &input) { int result = 0; for (byte i = 0; i < input.length(); i++) { result <<= 1; if (input[i] == '1') result |= 1; else if (input[i] != '0'){ result>>=1; break; } } return result; }Я, конечно, могу ошибаться, но у меня сложилось впечатление, что шифтование знаковых переменных - это игра с огнём. К тому же тут есть шанс получить на выходе странное, если строка вдруг оказалась подлиннее, чем 8 chars.
если строка вдруг оказалась подлиннее, чем 8 chars.
16
да, uint здесь уместнее.
Я, конечно, могу ошибаться, но у меня сложилось впечатление, что шифтование знаковых переменных - это игра с огнём. К тому же тут есть шанс получить на выходе странное, если строка вдруг оказалась подлиннее, чем 8 chars.
Знаковые вправо шифтовать надо осторожно, а влево, памойму, пофик.
Знаковые вправо шифтовать надо осторожно, а влево, памойму, пофик.
Ну вот я и обратил внимание на result>>=1;