Rankle
31.Март.2023 05:37:17
1
Добрый день. Понимаю что вопрос детский, но не понимаю почему разными способами я получаю одно и тоже
Есть TXT файл.
Его содержание:
00011000
12345678
0
Если с маркерами то
00011000#13 (#10 )
12345678#13 (#10 )
0#13 (#10 ) #26
char socket_buffer[8];
char timer_buffer[8];
......
myFile = SD.open ("config.txt", FILE_READ);
file_size = myFile.size();
myFile.seek(0);
myFile.readBytes (socket_buffer, 8);
myFile.seek(10);
myFile.readBytes (timer_buffer, 8);
myFile.close();
.......
и второй вариант
char socket_buffer[8];
char timer_buffer[8];
......
myFile = SD.open ("config.txt", FILE_READ);
file_size = myFile.size();
myFile.readBytes (socket_buffer, 8);
for (int i=0; i<8; i++)
{
myFile.seek(10+i);
timer_buffer[i] = myFile.peek ();
}
myFile.close();
.......
Вывожу для контроля это всё на TFT:
tft.setCursor(70, 135); tft.setTextColor(CYAN); tft.setTextSize(2); tft.println(socket_buffer);
tft.setCursor(70, 160); tft.setTextColor(CYAN); tft.setTextSize(2); tft.println(timer_buffer);
tft.setCursor(70, 185); tft.setTextColor(CYAN); tft.setTextSize(2); tft.println(file_size);
delay (3000);
Почему выводится следующее:
00011000
1234567800011000
21
Откуда “хвост” во второй строчке? Если проблема не с файлом и т.п. а с выводом на TFT, то почему первая и третья строка - правильные?
Потому что печатается всё, пока не встретится 0x00 ! Вы не предусмотрели места под финишный 0 !
Rankle
31.Март.2023 06:09:21
3
Не понял. Печатается на TFT или в буфер?
Я сделал некоторые изменения. Стало ещё непонятнее.
char socket_buffer[8] = " ";
char timer_buffer[8];
char test_buffer[8];
......
myFile = SD.open ("config.txt", FILE_READ);
file_size = myFile.size();
myFile.seek(0);
myFile.readBytes (socket_buffer, 8);
myFile.seek(10);
myFile.readBytes (timer_buffer, 8);
myFile.seek(20);
myFile.readBytes (test_buffer, 8);
myFile.close();
.......
tft.setCursor(70, 135); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(socket_buffer);
tft.setCursor(70, 160); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(timer_buffer);
tft.setCursor(70, 185); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(test_buffer);
tft.setCursor(70, 210); tft.setTextColor(CYAN); tft.setTextSize(2); tft.print(file_size);
delay (3000);
Получил на TFT следующее:
00011000
12345678
0000000012345678
38
При содержании файла:
00011000
12345678
00000000
00000000
Поясните пожалуйста какой именно финишный ноль я должен проверять? У меня после третьей строки есть ещё строчка. А почему в третий буфер “лезет” информация со второй строчки?
b707
31.Март.2023 07:46:12
5
Мужик, ну ты совсем темный? Не знаешь как строчки в Си устроены? Это же базовые знания…
Для того чтобы хранить строку из 8 символов - массив должен быть НА 9 ЭЛЕМЕНТОВ!
Rankle
31.Март.2023 09:13:02
6
Спасибо. Стараюсь.
Я во время этой лекции в универе ходил пить пиво с пацанами на набережную.
Rankle
31.Март.2023 09:30:08
8
:)) Эхх, хорошо бы. Но, пацаны разъехались, набережная уже не та, живу я уже не в том городе, да и дело было 25 лет назад …
1 лайк