Почему значение этого uint32_t всегда равно 0?

c++

Настройка метода вычисления размеров кадров 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?

, 👍0

Обсуждение

Что вы подразумеваете под “Я не могу присвоить значение переменной”? Конечно, можешь. Вы имеете в виду, что хотели бы изменить переменную _the caller_?, @Edgar Bonet

Я думаю, что вопрос подразумевает именно это, Эдгар., @Nick Gammon

пусть функция возвращает значение, @Juraj


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) {

Обратите внимание на амперсанд.

,

нормальным было бы вернуть значение как возврат функции. но мы не знаем контекста., @Juraj

Вот чего мне не хватало. Спасибо, Ник!, @Mighty Ferengi