【发布时间】:2012-11-09 20:37:43
【问题描述】:
对于我正在进行的项目,我使用幻数。 这个宏用来定义一个
#define BOOTSIGNATURE 0xAA55
但是,当我对生成的文件进行 HEXDUMP 处理时,应该说 AA55 的地方却是 55 AA。
是 GCC 混淆了字节顺序,还是我?该项目适用于 x86 处理器。 AA 55 需要按特定顺序排列。我可以只交换字节,但我很好奇 GCC 为什么要这样做。
【问题讨论】:
-
由于 x86 是小端,我可以理解为什么 GCC 认为这是想要的行为。但是,对我来说,AA55 有点像一串字节,需要按特定顺序。我怎样才能实现所需的行为?
-
您可以将其定义为字节字符串(数组)而不是单个整数。我不知道你是如何使用它的,所以我不知道它是否可以在没有其他修改的情况下工作。
#define BOOTSIGNATURE ((char[]){0xAA,0x55})。您也可以只检查架构并切换顺序,留下评论以便您知道原因。 -
二进制文件以与机器相同的字节顺序写入,当它再次加载时,它将被正确读取,如果你担心的话。
-
不,这是一个神奇的数字,这不是一个解决方案。
标签: c gcc x86 c-preprocessor endianness