Часто данные в файле записываются в виде: сколько-то байтов - размер очередной порции, затем - собственно данные. Изучал код на Си, читающий такой файл, и наткнулся на следующую конструкцию:
Выяснилось, что после такого чтения size легко может оказаться отрицательным, даже если и был записан вполне себе положительным (например, если первый байт был равен 0x1, а второй - 0xff).
char sizeLow, sizeHigh; int size; FILE * pFile; pFile = fopen ("myfile.bin" , "rb"); fread (&sizeHigh, 1, 1, pFile); fread (&sizeLow, 1, 1, pFile); size = (sizeHigh << 8) | sizeLow;