Endianness — против C ++ Cross Endian Union

Возможный дубликат:
Есть ли способ прочитать данные с прямым порядком байтов с помощью программы с прямым порядком байтов?

У меня есть структура объединения ниже в моем проекте, которую я пытаюсь изменить для чтения файла с прямым порядком байтов, и, поскольку программа работает на x86, она пытается прочитать файл с прямым порядком байтов и возвращает неправильный результат из объединения. Есть ли способ изменить объединение, чтобы прочитать его в формате с прямым порядком байтов? или альтернативный метод получения правильного типа данных?

struct AptConstItem {
AptConstItemType type;
union {
const char *strvalue;
unsigned int numvalue;
};
};

Благодарю.

0

Решение

Вы используете одну и ту же базовую технику независимо от порядка байтов: читать
big endian:

uint32_t
readBigEndian( std::istream& binaryInput )
{
uint32_t result
= (binaryInput.get() << 24) & 0xFF000000;
result |= (binaryInput.get() << 16) & 0x00FF0000;
result |= (binaryInput.get() <<  8) & 0x0000FF00;
result |= (binaryInput.get()      ) & 0x000000FF;
return result;
}

Для порядка байтов вы просто меняете порядок смен и масок.

2

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

Других решений пока нет …

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