Как изменить байт на целое число? - Arduino

Я искал везде, но не могли бы вы мне помочь преобразовать этот байт в int? В интернете полно примеров, но не для новичка вроде меня.

КОД:

int Button[] = {2, 4, 7 };

byte E = sizeof(Button);

int I = (int) E;


void setup() {

  Serial.begin(9600);

  Serial.print (I); // должно быть 3, в настоящее время 61


  }


void loop() {

 }

Я не знаю, почему байт E не преобразуется в int в int I с помощью команды (int)E. Было бы также удобнее считывать количество элементов напрямую как int. (Вы можете задаться вопросом, почему я хочу это сделать? Потому что я пишу программу с несколькими кнопками, поэтому я просто хочу добавить еще один вывод в массив и не менять целое число «I» (целое число I используется для циклов))

, 👍1


2 ответа


2

Код работает правильно. Функция sizeof() возвращает количество байтов в переменной, а не количество элементов. Ваш массив имеет тип int, который состоит из 2 байтов каждый. Таким образом, в сумме вы получаете 6 байтов для всего массива.

Что вам нужно сделать (вычислив количество элементов в массиве), так это разделить количество байтов в массиве на количество байтов для одного элемента:

int I = sizeof(Button)/sizeof(Button[0]);

Преобразование из byte в int сработало правильно, но вам это на самом деле не нужно. Вы можете вычислять вещи с обоими типами одинаково. Единственное отличие — это диапазон значений. Поскольку отрицательное число элемента не имеет смысла, и вы, конечно, не хотите определять больше 255 кнопок, вы можете сами выбрать, что вы хотите использовать. Использование byte сэкономит вам один байт памяти.

,

2

sizeof возвращает размер в байтах. int — это два байта в 8-битном микроконтроллере AVR. Массив из 3 целых чисел имеет 6 байтов.

возвращаемый тип sizeof - size_t, что в 8-битном AVR совпадает с unsigned int

,