Я читаю чужой код и не совсем понимаю, как он работает. Вот три строки кода. Я хочу знать, каково значение w3:
int w1 = fgetc(fp) & 0xFF;
int w2 = fgetc(fp) & 0xFF;
int w3 = w1 + (w2 << 8);
Я понимаю, что fgetc () возвращает символ из FILE * fp, но я запутался, когда он использует & оператор на символ со значением 0xFF. Затем используйте оператор побитового сдвига на w2 и добавьте его к w1. Я не уверен, следует ли мне ожидать символ или целое число. Это фрагмент кода из программы, которая считывает двоичные данные из файла и генерирует UV-координаты в качестве выходных данных. Но я меньше обеспокоен этим, и больше озабочен тем, как работает приведенный выше код.
Заранее спасибо за любые ответы.
& 0xff
гарантирует, что результат не подписан. Затем, w1 + (w2 << 8)
делает 16-битное целое число из двух байтов. По сути, этот фрагмент кода читает двухбайтовое целое число с прямым порядком байтов.
Что это int w1 = fgetc(fp) & 0xFF;
делает, чтобы скрыть полученное int
в один байт. (fgetc()
возвращает int
в конце концов)
Что это w1 + (w2 << 8);
делает, чтобы объединить оба байта в один int
, Вероятно, пытается десериализовать ранее сериализованное целое число. (Не лучший способ сделать это, если проблема с порядком байтов)