c - 小端宏

标签 c macros header-files endianness

所以我有一个令人兴奋的新问题,我非常希望得到解答。所以我正在编写一个文件压缩器,基本上是一个 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/

相关文章:

c++ - C/C++ 使用 int 或 unsigned int

C宏扩展成多个函数调用

我可以设置工作队列的优先级吗?

c++ - 如何通过c中的指针传递二维数组

c - 为结构元素数组初始化 C 结构中的一个成员

c++ - 在一行中定义多个具有相同返回类型和参数类型的私有(private)函数

ios - iOS中宏的误区

ios - 动态开启 NSLogs

c - 将数字四舍五入为 int 大小边界字节数的方法

c++ - 一次包含已在 main.obj 中定义的 .h 函数