Почему значение этого uint32_t всегда равно 0?
Настройка метода вычисления размеров кадров ID3, но переменная frsz всегда возвращает 0. Мне нужно передать эту переменную обратно другому методу, чтобы программа могла перебирать кадры ID3.
void frameInfo(File track, char frame[4], uint32_t ltwo[4], int32_t frsz) {
uint8_t buff[4];
track.seek(10);
track.read((uint8_t *)frame, 4);
track.seek(14);
track.read((uint8_t *)buff,4);
ltwo[0] = buff[0];
ltwo[1] = buff[1];
ltwo[2] = buff[2];
ltwo[3] = buff[3];
ltwo[0] = ltwo[0] * 2097152;
ltwo[1] = ltwo[1] * 16384;
ltwo[2] = ltwo[2] * 128;
frsz = ltwo[0] + ltwo[1] + ltwo[2] + ltwo[3];
track.rewind();
}
Мне не хватает какой-то инициализации для этого uint32?
@Mighty Ferengi, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 3
void frameInfo(File track, char frame[4], uint32_t ltwo[4], int32_t frsz) {
Как вы это сделали, frsz передается по значению (т. е. копия сделана, и вы изменили копию, а не оригинал). Чтобы заставить его измениться вне функции, вам нужно передать его по ссылке:
void frameInfo(File track, char frame[4], uint32_t ltwo[4], int32_t &frsz) {
Обратите внимание на амперсанд.
,
@Nick Gammon
нормальным было бы вернуть значение как возврат функции. но мы не знаем контекста., @Juraj
Вот чего мне не хватало. Спасибо, Ник!, @Mighty Ferengi
Смотрите также:
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- ошибка: ожидаемое первичное выражение перед токеном ','
- Светодиоды: разница между общим анодом и общим катодом
Что вы подразумеваете под “Я не могу присвоить значение переменной”? Конечно, можешь. Вы имеете в виду, что хотели бы изменить переменную _the caller_?, @Edgar Bonet
Я думаю, что вопрос подразумевает именно это, Эдгар., @Nick Gammon
пусть функция возвращает значение, @Juraj