hex — C ++ побитовый сдвиг с использованием файлового указателя

Я читаю чужой код и не совсем понимаю, как он работает. Вот три строки кода. Я хочу знать, каково значение w3:

int w1 = fgetc(fp) & 0xFF;
int w2 = fgetc(fp) & 0xFF;
int w3 = w1 + (w2 << 8);

Я понимаю, что fgetc () возвращает символ из FILE * fp, но я запутался, когда он использует & оператор на символ со значением 0xFF. Затем используйте оператор побитового сдвига на w2 и добавьте его к w1. Я не уверен, следует ли мне ожидать символ или целое число. Это фрагмент кода из программы, которая считывает двоичные данные из файла и генерирует UV-координаты в качестве выходных данных. Но я меньше обеспокоен этим, и больше озабочен тем, как работает приведенный выше код.

Заранее спасибо за любые ответы.

2

Решение

& 0xff гарантирует, что результат не подписан. Затем, w1 + (w2 << 8) делает 16-битное целое число из двух байтов. По сути, этот фрагмент кода читает двухбайтовое целое число с прямым порядком байтов.

3

Другие решения

Что это int w1 = fgetc(fp) & 0xFF; делает, чтобы скрыть полученное int в один байт. (fgetc() возвращает int в конце концов)

Что это w1 + (w2 << 8); делает, чтобы объединить оба байта в один int, Вероятно, пытается десериализовать ранее сериализованное целое число. (Не лучший способ сделать это, если проблема с порядком байтов)

1

По вопросам рекламы [email protected]