金沙真人官方直营登入: [C语言] 结构体赋值???

永利游戏开户直营
558|15
楼主
如题,typedef struct{
    uint8_t sof; // 起始符
    union {
        struct
        {
            uint8_t devtype;                  // 设备类型
            uint8_t devno[HZ_DEVNO_LENGTH];   // 设备地址
            uint8_t vendor[HZ_VENDOR_LENGTH]; // 厂商代码
        } u;
        uint8_t addr[HZ_ADDR_LENGTH]; // 地址码
    } alladdr;
    uint8_t ctrlcode; // 控制码
    uint8_t len;      // 数据长度
    uint8_t data[128]; // 帧数据
} HZ_Frame;


沙发
 楼主 | 2020-3-23 10:20 | 只看该作者
条件是:
1、HZ_Frame *frame;
2、frame = (HZ_Frame *)p;
3、p是串口接收到的20个字节,金沙真人官方直营登入:如“EF EF EF EF 68 01 04 00 01 20 20 00 00 24 06 E5 04 00 08 01 80 4A 16”;
4、其中0x68// 帧起始符;0x16// 帧结束符

评论

xch 2020-3-24 11:06 回复TA
指针类型强制转换能对齐?HZ_Frame 指针应该是默认32位对齐的吧? 如果不能,则转换非法。 
板凳
 楼主 | 2020-3-23 10:22 | 只看该作者
frame = (HZ_Frame *)p;???
我赋值赋不过去啊,按顺序赋值吗?
地板
| 2020-3-23 10:32 | 只看该作者
多学C语言 ,看一些公开协议的代码
5
| 2020-3-23 13:51 | 只看该作者
应该可以指针赋值的,不过还要注意字节对齐和大小端的问题。
6
| 2020-3-24 08:40 | 只看该作者
语法上没发现有什么问题,编译器提示什么错误?
7
| 2020-3-24 11:13 | 只看该作者
结构体内成员的物理地址不是连续摆放的。对齐的。所以无法强制转换。别偷懒

8
 楼主 | 2020-3-24 13:44 | 只看该作者
xch 发表于 2020-3-24 11:13
结构体内成员的物理地址不是连续摆放的。对齐的。所以无法强制转换。别偷懒

...

多谢
9
| 2020-3-24 15:13 | 只看该作者
顶一个
10
| 2020-3-26 09:12 | 只看该作者
这是电表数据帧吗
11
| 2020-3-26 10:22 | 只看该作者
感觉没啥问题,可以赋值啊
12
| 2020-3-26 11:14 | 只看该作者
可以赋值,不能直接强制转换就换一个指针类型中转一下
13
 楼主 | 2020-3-26 14:47 | 只看该作者

是的
14
 楼主 | 2020-3-26 14:50 | 只看该作者
本帖最后由 772671294 于 2020-3-26 14:55 编辑
yklstudent 发表于 2020-3-26 10:22
感觉没啥问题,可以赋值啊

是可以,代码我贴的不全;我提问,是不了解结构体赋值,
1                2                      3              4                             5                                6                   7
设备类型     00(保留)      通道号        绑定传感器数量        绑定的传感器地址        校验1位        固定不变;
68 01 04 00 01 20 20 00 00 24 06 E5这一段不知道是什么时候赋值的,赋到哪里了
如果赋值
typedef struct{
    uint8_t sof; // 起始符                                                                0X68--OK
    union {
        struct
        {
            uint8_t devtype;                  // 设备类型                            "1"--OK
            uint8_t devno[HZ_DEVNO_LENGTH];   // 设备地址             ?
            uint8_t vendor[HZ_VENDOR_LENGTH]; // 厂商代码            ?
        } u;
        uint8_t addr[HZ_ADDR_LENGTH]; // 地址码                           ?
    } alladdr;
    uint8_t ctrlcode; // 控制码                                                          ?
    uint8_t len;      // 数据长度                                                       ?
    uint8_t data[128]; // 帧数据                                                     ?
} HZ_Frame
还是说串口接收的都放uint8_t data[128]; // 帧数据 中,但是整个代码其它地方我没看到对其它?赋值


15
| 2020-3-26 18:48 | 只看该作者
772671294 发表于 2020-3-26 14:50
是可以,代码我贴的不全;我提问,是不了解结构体赋值,
1                2                      3      ...

就没看懂你说啥
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

金沙真人官方直营登入: 热门推荐

永利游戏开户直营 快速回复 返回顶部 返回列表
新世纪IM申博开奖 澳门赢到粥电话网上娱乐场 永利游戏开户直营 澳门金店洗钱登入 大富豪娱乐DS太阳城棋牌
申博太阳城在线娱乐登入 澳洲国际江苏快三最牛攻略 万达娱乐注册 菲律宾太阳城娱乐登入官网 足球外围交流群
太阳城总代理现金网登入 赌博游戏 DS太阳城亚游娱乐平台官网 威斯汀大小骰宝助赢软件 菲律宾申博太阳城直属官网注册彩金登入
hg娱乐城登入 申博360-电子游戏首页登入 ab7777.com 新葡京开户网址 金沙网上注册网站