byte XORByteArray(byte _Bytes[]) {
byte tmpByte = 0x00;
byte _BytesLength = sizeof(_Bytes);
for (byte i = 0; i < _BytesLength; i++) {
tmpByte ^= _Bytes[i];
}
return tmpByte;
}
вычисляет XOR только для 2х первых элементов, как заставить ее вычислять весь массив?
C/C++
Измерить размер массива в функции Arduino. sizeof работает некорректно с переданной в функцию переменной.
Функция:
Никак не заставить. Только явно вручную передавать длину массива в функцию - вторым параметром. Именно так (длину каждого измерения массива отдельным параметром) и передают массив в функцию в языке C - если функции надо знать размер массива.
Конструкция byte _Bytes[] - всего лишь синтаксический сахар для byte *_Bytes. Обе записи в описании формального параметра функции абсолютно идентичны. В функцию XORByteArray передаётся ТОЛЬКО указатель на начало массива - БЕЗ какой-либо информации о длине массива. И sizeof(_Bytes) возвращает длину значения типа char*.
P.S. В языке C НЕТ массивов - есть только синтаксический сахар над указателям.
Конструкция byte _Bytes[] - всего лишь синтаксический сахар для byte *_Bytes. Обе записи в описании формального параметра функции абсолютно идентичны. В функцию XORByteArray передаётся ТОЛЬКО указатель на начало массива - БЕЗ какой-либо информации о длине массива. И sizeof(_Bytes) возвращает длину значения типа char*.
P.S. В языке C НЕТ массивов - есть только синтаксический сахар над указателям.
создавай массив с уже заданным размером. сложности при работе с МК только во вред
Статический массив существует только в той области видимости, где он создан. В аргументах функции его создать невозможно, поэтому byte bytes[] или даже byte bytes[1001] преобразуется в byte* bytes
соответственно такая функция принимает не статический массив а указатель. А при попытке передать статик, он неявно преобразуется в адрес (указатель) своего первого элемента, просто чтобы соответствовать типу принимаемого аргумента.
соответственно такая функция принимает не статический массив а указатель. А при попытке передать статик, он неявно преобразуется в адрес (указатель) своего первого элемента, просто чтобы соответствовать типу принимаемого аргумента.
for (byte i = 0; i < _BytesLength-1
если размер массива неизвестен на момент компиляции программы – sizeof() не сможет его посчитать и выдаст размер указателя (2 байта на AVR)
если размер массива неизвестен на момент компиляции программы – sizeof() не сможет его посчитать и выдаст размер указателя (2 байта на AVR)
Barat Nurdinov
В вашем варианте будет только 1 итерация цикла, так как sizeof определяет размер массива всегда 2
Ксорят, чтобы изменить значение байта, а не его адрес.
Твоя функция вообще ничего не изменяет.
И возвращать функции ничего не надо.
Получил на входе массив, обработал, и всё.
Если надо, вернул успешность или неуспешность обработки.
А размер массива типа char измеряется чаще в цикле типа:
int Size=0;
while(Bytes[i]) Size++;
То есть пока есть значение в элементе массива, отличное от нуля, увеличить размер массива Size на 1.
Либо без поиска размера массива char, пока while(Bytes[i]), выполняй свой ксор.
Твоя функция вообще ничего не изменяет.
И возвращать функции ничего не надо.
Получил на входе массив, обработал, и всё.
Если надо, вернул успешность или неуспешность обработки.
А размер массива типа char измеряется чаще в цикле типа:
int Size=0;
while(Bytes[i]) Size++;
То есть пока есть значение в элементе массива, отличное от нуля, увеличить размер массива Size на 1.
Либо без поиска размера массива char, пока while(Bytes[i]), выполняй свой ксор.
Похожие вопросы
- При совершении арифметических операций с переданными в рекурсивную функцию переменными, переменные меняются(Си)
- Как работать с элементами динамического массива из функции?
- Создать и вывести двумерный массив через функции
- Массив с функцией С++
- Обработка одномерных массивов в функциях
- Обработка двумерных массивов в функциях
- С++.Помогите пожалуйста! Написать программу по обработке динамических массивов. Размеры массивов вводить с клавиатуры.
- Код работает некорректно. Язык Си. Нахождение максимального отрицательного элемента матрицы и замена его числом.
- C++ добавить динамический массив в код Чтоб он работал
- Как массив передать в функцию и обратно? (Язык C)