У меня есть двоичный файл в формате с прямым порядком байтов, из которого я получаю 2-битные и 4-битные целочисленные данные. Машина, на которой я работаю, имеет младший порядок.
Есть ли у кого-нибудь какие-либо предложения или рекомендации по извлечению целочисленных данных из известного двоичного формата и переключению порядка байтов на лету? Я не уверен, что мое текущее решение даже правильно:
int myInt;
ifstream dataFile(dataFileLocation, ios::in | ios::binary);
dataFile.seekg(99, ios::beg); //Pull data starting at byte 100;
//For 4-byte value:
char chunk[4];
dataFile.read(chunk, 4);
myInt = (int)(chunk[0] << 24 | chunk[1] << 16 | chunk[2] << 8 | chunk[3]);
//For 2-byte value:
char chunk[2];
dataFile.read(chunk, 4);
myInt = (int)(chunk[0] << 8 | chunk[1]);
Кажется, что это работает нормально для 2-байтовых данных, но дает, как мне кажется, неправильные значения для 4-байтовых данных. Я читал о htonl (), но из того, что я прочитал, это не умный способ добиться гибкости.