急!疑惑 郁闷
#include <stdio.h>#include <string.h>
typedef struct
{
char data[3];
short checksum;
} dataset; /***分组中的16个8位数***/
typedef struct
{
short flag;
dataset data[2];
} ft3frame; /***ft3帧格式****/
main()
{
ft3frame ft1;
unsigned char data[20];
int i,j,k;
char *ptr;
for(i=0;i<20;i++)
{
data[i]=i+230;
}
k=0;
for(i=0;i<2;i++) /***对ft1帧中的八位数付初值***/
{
for(j=0;j<3;j++)
{
ft1.data[i].data[j]=data[k];
printf("ft1.data[%d].data[%d]=%x\n",i,j,data[k]);
k++;
}
ft1.data[i].checksum=0;
}
printf("ft1.checksum0=%d\n",ft1.data[0].checksum);
printf("ft1.checksum1=%d\n",ft1.data[1].checksum);
ft1.flag=0x0564;
ptr=(char *)&ft1;
for(i=0;i<13;i++)
printf("%x\n ",*ptr++);
}
[chenlin@localhost ~]$ gcc -o text tex.c
[chenlin@localhost ~]$ ./text
ft1.data[0].data[0]=e6
ft1.data[0].data[1]=e7
ft1.data[0].data[2]=e8
ft1.data[1].data[0]=e9
ft1.data[1].data[1]=ea
ft1.data[1].data[2]=eb
ft1.checksum0=0
ft1.checksum1=0
64
5
ffffffe6
ffffffe7
ffffffe8
8
0
0
ffffffe9
ffffffea
ffffffeb
ffffff82
0
此结果是在linux系统下运行的 很是疑惑
怎么运行后的结果会是这样呢?
printf("ft1.data[%d].data[%d]=%x\n",i,j,data[k]);
printf("%x\n ",*ptr++);
这两条语句的输出格式是一样的 怎么一个输出e6 而另外一个输出的是ffffffe6呢?
还有 强制类型转换之后 checksum 应该输出0 0 两个数的 怎么输出的是 8 0 0 呢?最后一个干脆直接输出一个0