Я пытаюсь прочитать файл растрового изображения, побайтово, и у меня есть цикл, который работает до достижения EOF.Для этого у меня есть переменная, объявленная как unsigned int
, которая хранит каждый байт.Цикл останавливается, когда эта переменная равна EOF
.
Интересный момент: если я объявлю свою переменную как unsigned int
, она будет работать.Однако, если я объявлю свою переменную как unsigned short int
, цикл будет выполняться вечно, потому что он никогда не найдет EOF
.
#include <stdio.h>
int main()
{
FILE *file;
unsigned int currentByte;
file = fopen("/home/stanley/Desktop/x.bmp", "rb");
while ((currentByte = fgetc(file)) != EOF) {
printf("%d \n", currentByte);
}
fclose(file);
return 0;
}
Код выше - это код, который я пишу.Если размер файла составляет 90B, на экране выводится 90 байт.
Однако по какой-то причине, когда я изменяю его на unsigned short int currentByte
, цикл продолжает работать вечно.Как будто currentByte
никогда не было равно EOF
.
Я где-то читал, что EOF
содержит отрицательное значение (-1).Но если EOF
отрицательно, почему он работает, когда я использую только unsigned int
, и почему он вызывает ошибку, когда я использую unsigned short int
?Теоретически, не должна ли проблема быть связана с самим unsigned
, а не с short
?Это без знака, который не может хранить отрицательные значения.
Извините, если это очень глупый вопрос.Я пытаюсь лучше понять, как работают биты и байты, и некоторые концепции еще могут показаться мне странными.
Я компилирую его в следующей среде:
- ОС:Ubuntu 18.04 x64
- GCC: gcc (Ubuntu 7.3.0-27ubuntu1 ~ 18.04) 7.3.0
Заранее спасибо.:)