【发布时间】:2013-07-03 12:53:19
【问题描述】:
考虑以下代码:
#include "stdio.h"
typedef struct CustomStruct
{
short Element1[10];
}CustomStruct;
void F2(char* Y)
{
*Y=0x00;
Y++;
*Y=0x1F;
}
void F1(CustomStruct* X)
{
F2((char *)X);
printf("s = %x\n", (*X).Element1[0]);
}
int main(void)
{
CustomStruct s;
F1(&s);
return 0;
}
在运行时,调用函数F1结束时,使用不同的编译器会得到不同的结果。
(*X).Element1[0] = 0x1f00 在某些编译器中,(*X).Element1[0] = 0x001f 在另一个编译器中。
我很清楚这是一个字节序问题。
是否有任何编译器选项或变通方法可供使用,以便我得到 (*X).Element1[0] = 0x001f 而不管使用的编译器?
【问题讨论】:
-
向我们展示您如何填充
Element1 -
对不起,我没明白你的意思。你的意思是你需要F2的实际身体吗?我认为它没用,因为我保证在 F2 结束时你有 Y[0]=0x00 和 Y[1]=0x1F。
-
您正在尝试提供该保证。我们正在尝试向您展示如何操作,但除非您向我们提供真正的代码,否则我们只能猜测您在做什么。
-
我已经更新了代码,以便我们更好地了解彼此:)
-
它实际上在我的英特尔系统上打印
1f00,但是好的,我想我现在知道了。
标签: c++ c pointers endianness cpu-architecture