- 论坛徽章:
- 2
|
回复 #1 guode0724 的帖子
楼主感到奇怪的是, 为什么两段代码输出的结果不同吧?
我觉得是printf的问题。 两段代码中向printf传递的参数不同。
第1段代码中, 传递的是一个 unsigned short, 会被提升到int或者unsigned传递。
第2段代码中, 传递的是一个结构体。 应该如何传递我就不清楚了 ……
楼主可以试着这样改:
unsigned char content[sizeof(t1)];
memcpy(content,&t1,sizeof(content));
for (i=0;i!=sizeof(content);++i)
printf("%02X ",content[ i ]);
printf("\n");
这样来查看t1(两段代码中分别是 unsigned short和一个结构体)中的内容。
剩下的,就真的是大端小端问题了。 6次输出应该是一致的。
我这里没有楼主说的平台 …… 测不了 ……
代码贴这里, 楼主自己试试吧
#include <stdio.h>
#include <string.h>
typedef struct ctst{
unsigned short pll_iset :2,
pll_inv :2,
pll_reset :1,
pll_r :9,
rfu :2;
}TST;
int main(void)
{
unsigned short t1;
unsigned char content[sizeof(t1)];
size_t i;
t1 = 0x0000;
((TST *)&t1)->pll_r = 0x18;
((TST *)&t1)->pll_inv = 1;
memcpy(content,&t1,sizeof(content));
for (i=0;i!=sizeof(content);++i)
printf("%02X ",content[ i ]);
printf("\n");
((TST *)&t1)->pll_inv = 2;
memcpy(content,&t1,sizeof(t1));
for (i=0;i!=sizeof(content);++i)
printf("%02X ",content[ i ]);
printf("\n");
((TST *)&t1)->pll_inv = 3;
memcpy(content,&t1,sizeof(t1));
for (i=0;i!=sizeof(content);++i)
printf("%02X ",content[ i ]);
printf("\n");
return 0;
}
[ 本帖最后由 OwnWaterloo 于 2009-6-3 09:57 编辑 ] |
|