Работа с аргументами функции
- Войдите на сайт для отправки комментариев
Пт, 26/05/2017 - 23:11
Добрый день!
Имеется код:
byte getByteFromLong(unsigned long var, byte n) {
byte out;
unsigned long mask;
mask=long(0xFF)<<(8*(n-1));
var=var&mask;
var=var>>(8*(n-1));
out=var;
return out;
}
Вызывается функция с аргументами-значениями: никаких указателей - только значения.
Это функция, выделяющая байт номер "n" из значения "var". Я вижу не лучший стиль программирования в том, что изменяется аргумент функции.
Профессионалы, подскажите пожалуйста, существует ли возможность измения в памяти Arduino переменной tmp, при вызовах getByteFromLong(tmp, 3) или компилятор защитит меня от этого нехорошего эффекта?
Защитит
Проще
byte ByteFromLong(unsigned long value, byte bytenum) { union tmpunion { unsigned long longvalue; byte bytes[4]; } tmplong; tmplong.longvalue = value; return tmplong.bytes[bytenum & 0x3]; }проверка
DetSimen,
Но сам код, конечно, намного более прямой, чем в исходном сообщении.
Я не силен в Си, но попытался бы сделать что-то вроде:
andriano, спасибо, что поправил.