Макросы с прямым порядком байтов

Итак, у меня есть новый и волнующий вопрос, на который я очень хотел бы получить ответ. Итак, я пишу файловый компрессор, в основном tar, и, честно говоря, этот код, кажется, работает довольно хорошо. На чем я сейчас застрял, так это на дополнительной функции, которая требуется от проекта. Нам нужно иметь возможность создавать двоичные файлы, как если бы они были созданы на машине с прямым порядком байтов. Я создал файл заголовка, который я включил в свой код, который должен выполнять замену битов для меня. Отсюда следует следующее:

#ifndef MYLIB_H
#define MYLIB_H

#define BITS_PER_BYTE 8
#define true 1
#define false 0

typedef unsigned char uchar;
typedef unsigned long ulong;
typedef unsigned int uint;
typedef unsigned short ushort;

#ifdef LITTLE_ENDIAN

#define SwapULong(val) (val << 24 | (val << 8 & 0xFF0000) | (val >> 8 & 0xFF00) | val >> 24 & 0xFF)
#define SwapUShort(val) (val << BITS_PER_BYTE | val >> BITS_PER_BYTE)

#else

#define SwapULong(val) (val)
#define SwapUShort(val) (val)

#endif

#endif

Поэтому, когда я компилирую с помощью gcc и запускаю программу, ошибок нет. Однако, когда я делаю шестнадцатеричный дамп -C вывода, вывод по-прежнему находится в порядке с обратным порядком байтов!

Затем я попытался скомпилировать с флагом -E и получил кучу строк, говорящих, что

./compress line #: typedef: command not found

который стал

./compress line #: __extension__ : command not found

пока последние строки вывода терминала не показали

./compress line 86: syntax error near unexpected '}' token
./compress line 86: __extension__ typedef struct { int __val[2]; } __fsid_t;

Итак, какие-либо идеи, что может быть причиной этого для меня?

Любая помощь будет оценена по достоинству.


person MustangeSilenna    schedule 28.05.2012    source источник
comment
Что такое строка 86? Можете ли вы добавить его и окружающие строки к своему вопросу?   -  person Some programmer dude    schedule 28.05.2012


Ответы (1)


Вам нужно включить заголовок endian.h.

person Michael Foukarakis    schedule 28.05.2012
comment
Ух ты. Не могу поверить, что забыл это. но исправила! благодарю вас. - person MustangeSilenna; 28.05.2012