add00 发表于 2012-8-1 12:36:31

请教一个C51结构体的奇怪问题

在做一个通讯结构时发现这样的问题,百思不得其解啊~~
定义双字节结构
typedef   unsigned char        UCHAR;
typedef        unsigned int        UINT;

typedefunion
{
        UINT        VAL;
        struct
        {
                UCHAR        LOW;
                UCHAR        HIGH;
        }BYTE;
}WORD;

定义数据结构

union send_packed                                        //上传数据包定义
{
        struct
        {
                WORD        Head;
                WORD        CH1;
                WORD        CH2;
                WORD        CH3;
                WORD        CH4;
                WORD        CH5;
                WORD        CH6;
                UCHAR        Chk;
        } packet;
        UCHAR byt_data;
} sDATA;
这样定义的数据是对的 每个WORD分配2字节

union send_packed                                        //上传数据包定义
{
        struct
        {
                WORD        Head;
                WORD        CH;
                UCHAR        Chk;
        } packet;
        UCHAR byt_data;
} sDATA;
但这样定义出来的数据就乱套了,每个CH[]分配4字节,其中高2字节是空的。。。 不解啊

还有C51貌似不支持对齐指令#pragma pack(1)啊~~

在线等,知道的帮忙下 谢谢了

add00 发表于 2012-8-1 13:12:44

不要沉了~~知道的给点提示 谢谢了

lovewwy 发表于 2012-8-1 14:03:41

不是正好吗,15

add00 发表于 2012-8-1 15:11:52

不是的上图你看看

add00 发表于 2012-8-1 15:35:53

lovewwy 发表于 2012-8-1 14:03 static/image/common/back.gif
不是正好吗,15

不是 15的我上图了 你帮忙看看是怎么一回事

add00 发表于 2012-8-2 08:49:30


不要沉了~~知道的给点提示 谢谢了

korren 发表于 2012-8-2 09:12:10

应该是两个字节,看后面的地址分配就知道了.

danpianjibb 发表于 2012-8-2 09:25:33

支持 korren !

lovewwy 发表于 2012-8-2 10:26:52

korren 发表于 2012-8-2 09:12 static/image/common/back.gif
应该是两个字节,看后面的地址分配就知道了.

地址分配好像的确4个字节,不知道为啥

graycker 发表于 2012-8-2 10:40:32

是编译器不支持的,前几天看了c++primary plus也说到了这个,只有比较新版本的c++编译器支持,
这个,应该也一样的吧

add00 发表于 2012-8-2 10:40:42

korren 发表于 2012-8-2 09:12 static/image/common/back.gif
应该是两个字节,看后面的地址分配就知道了.

你是说 CHk的分配地址??这个我也疑惑。。。。
硬件好了,上硬件看看结果先~~

graycker 发表于 2012-8-2 11:04:35

graycker 发表于 2012-8-2 10:40 static/image/common/back.gif
是编译器不支持的,前几天看了c++primary plus也说到了这个,只有比较新版本的c++编译器支持,
这个,应该 ...

记错了,刚刚下了个电子版的看了下,是老版本的编译器结构体中不支持string类型

add00 发表于 2012-8-2 13:11:23

硬件测试下来 2个结构的运行结果一样。。。。。
说明是IDE或者Keil的编译显示有问题

唉~~都是看下sizeof()惹得祸,明明是15字节,size下居然29字节了
页: [1]
查看完整版本: 请教一个C51结构体的奇怪问题