Чтение двоичного файла на SD-карте
Почему я не могу прочитать последний байт файла, когда использую код Arduino ide? Код в cpp работает без ошибок. Это мой код в Arduino ide:
vector<unsigned char> text;
unsigned char textseg;
in_file.read(&textseg,1);
while (in_file.available()){
text.push_back(textseg);
in_file.read(&textseg,1);
}
А это код cpp:
vector<unsigned char> text;
unsigned char textseg;
in_file.read(reinterpret_cast<char*>(&textseg), 1);
while (!in_file.eof())
{ text.push_back(textseg);
in_file.read(reinterpret_cast<char*>(&textseg), 1);
}
@george, 👍2
Обсуждение1 ответ
▲ 1
Похоже, что ваш цикл выходит за один. Я бы предпочел:
vector<unsigned char> text;
unsigned char textseg;
while (in_file.available()){
in_file.read(&textseg,1);
text.push_back(textseg);
}
Зачем читать байт, как вы это сделали, прежде чем узнать, доступен ли он?
В стандартной библиотеке C++ eof()
имеет значение true, если чтение не удалось, однако в Arduino available()
означает, что байт доступен для чтения. Их нельзя заменить напрямую.
,
@Nick Gammon
Смотрите также:
- Как устранить сообщение об ошибке "assignment of function 'void digitalWrite (uint8_t, uint_8)"?
- Получить массив символов с помощью модуля SIM900
- Считывание данных нескольких датчиков из текстового файла, расположенного на SD-карте в Arduino/ESP32
- Проблемы с Serial.read()
- Как запрограммировать 2 ультразвуковых датчика, один на серводвигателе и один прикрепленный на передней стороне автомобиля?
- Термистор не работает
- Занимают ли комментарии место в скомпилированном скетче C++? Ардуино / узел микроконтроллера
- Как заставить внешнюю программу изменять значения внутри кода Arduino C++?
Я предполагаю, что разница вызвана другим объявлением in_file. Но поскольку вы не показываете нам декларацию, это всего лишь предположение. Это также вызвано тем, что вы читаете последнюю строку, но не записываете ее в текстовый вектор, потому что цикл with не входит в цикл, когда читается последний символ. У меня нет объяснения, почему этого не происходит во втором случае. Возможно, потому, что eof срабатывает только тогда, когда метод чтения читает из пустого потока, и доступный знает, что поток пуст, без повторного чтения из него., @Peter Paul Kiefer
потому что ты это читаешь, но не пишешь. у вас есть чтение перед циклом while, но нет записи после цикла while.
available()
возвращает количество байтов, доступных для чтения.eof()
верен, когда вы пытаетесь прочитать больше, чем длина файла., @JurajЗнаете ли вы, что feof() возвращает true только **после** того, как вы попытались прочитать конец файла?, @the busybee