__attribute__((packed)) 指针传递,赋值错误问题。
ling 2009-03-02 03:53:48 各位大侠, 外部打印值,和内部赋的值,完全不一样,为什么呢,怎么解决? 请看下面的程序。
程序:
===========================
typedef struct AUTO_SUBMIT_ST
{
char cAutoSubmitFlag; // 自动上报开关
unsigned int uiStartTime; // 开始时间
unsigned int uiEndTime; // 结束时间
unsigned int uiTimeCycle; // 周期时间
unsigned int uiLastTime; // 上一次上报时间
}__attribute__((packed))AutoSubmitInfo; // 自动上报信息结构体
void testfun(unsigned int * output, unsigned short input)
{
*output=(unsigned int )input;//函数内部赋值
printf("%x=%x\n",output,*output);
printf("%x ",*((char*)output+0));printf("%x ",*((char*)output+1));printf("%x ",*((char*)output+2));printf("%x \n",*((char*)output+3));
}
int main(int argn, char *argc)
{
AutoSubmitInfo testdata;
AutoSubmitInfo* pst=&testdata;
testfun(&(pst->uiLastTime), 0xbc);
printf("%x=%x\n",&(pst->uiLastTime),pst->uiLastTime);//外部打印值,和内部赋的值,完全不一样,为什么呢,怎么解决? printf("%x ",*((char*)(&(pst->uiLastTime))+0));printf("%x ",*((char*)(&(pst->uiLastTime))+1));printf("%x ",*((char*)(&(pst->uiLastTime))+2));printf("%x \n",*((char*)(&(pst->uiLastTime))+3));
}
===========================
编译:
[root@localhost MIT]# arm-linux-gcc test.c
===========================
打印结果:
[/mnt/nfs]./a.out
内部bffffe59=bc000000
0 0 0 a4
外部bffffe59=a4000000
0 0 0 a4