Я работаю над кодом синтаксического анализатора для чтения всех данных из двоичного файла.Между прочим, бинарный файл находится в Big-Endian.Когда я читаю двоичный заголовок файла, я читаю его в Structure
с помощью этого метода:
Структура:
struct BinaryHeader{
int jobID;
int lineNumber;
int reelNumber;
short unsigned int tracesPerEnsemble;
short int aTracesPerEnsemble;
short unsigned int sampleInterval;
short unsigned int sampleIntervalOriginalFieldRec;
short unsigned int samplesPerTrace;
short unsigned int samplesPerTraceOriginalFieldRec;
...etc.
Метод анализа:
void Segy::parseSegyFile(){
char textHeader[3200]; //to skip the first 3200 byte
ifs.read(textHeader,sizeof(textHeader));
BinaryHeader binaryHeader;
ifs.read(reinterpret_cast<char *>(&binaryHeader), sizeof(binaryHeader));
}
}
Как я уже упоминал, порядковый номер является Big-Endian, я нашел этот ответ для преобразования, и он работает как обаяние, но когда - например - яраспечатать двоичный заголовок Я всегда должен поменять местами последовательность байтов.
std::cout << std::left << std::setw(w) << "JobID:" << std::fixed << SwapEnd(binaryHeader.jobID) << std::endl
Вопрос: Есть ли какой-нибудь элегантный способ конвертировать весь binaryHeader в Little-Endian?