所以我有一个令人兴奋的新问题,我非常希望得到解答。所以我正在编写一个文件压缩器,基本上是一个 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 编译并运行程序时没有错误。但是,当我对输出执行 hexdump -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;
那么有什么想法可能导致我出现这种情况吗?
如有任何帮助,我们将不胜感激。
最佳答案
您需要包含 endian.h
header 。
关于c - 小端宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781003/