【问题标题】:Little Endian Macros小端宏
【发布时间】:2012-05-28 07:39:24
【问题描述】:

所以我有一个新的、令人兴奋的问题,我非常希望得到解答。所以我正在编写一个文件压缩器,基本上是一个 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 时,输出仍然是 Big Endian 顺序!

然后我尝试使用 -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;

那么有什么想法可能导致我出现这种情况吗?

任何帮助将不胜感激。

【问题讨论】:

  • 第 86 行是什么?您可以将它和周围的线条添加到您的问题中吗?

标签: c macros header-files endianness


【解决方案1】:

您需要包含endian.h 标头。

【讨论】:

  • 哇。我不敢相信我忘记了。但它修复了它!谢谢。
猜你喜欢
  • 2011-01-07
  • 2021-02-20
  • 2020-12-17
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
相关资源
最近更新 更多