正确地枚举enum和typedef结构

时间:2019-04-17 17:07:24

标签: c++ bit bit-packing nibble

我正在尝试进行一些打包以可能的小格式传输数据,但是我不确定如何对其进行存档,我从typedef结构开始,在其中我为每个元素提供了大小,但是当我尝试使用UART传输它,在另一端,我将其作为每个元素的一个字节接收

#include <stdio.h>
#include <iostream>
    enum type 
    {
        id_hardware=1,
        id_software,
        id_led,
        id_adc,
        id_motor,
        id_battery
                /* ... some enums more */
                id_some = 31
    };
    #pragma pack(push, 1)
    typedef struct
    {
        uint8_t id_software     : 8;
        uint8_t id_led_light    : 8;    /* values from 0 to 100 -> 0 - 100% */ 
        uint8_t id_adc          : 8;    /* e.g 45,xx */
        uint8_t id_adc_precision: 4;    /* e.g xx,06 */
        uint8_t battery_voltage : 6;    
        uint8_t hardware_id     : 5;
        uint8_t id_motor        : 1;    /* on-off */
    } data;
    #pragma pack(pop)
    data obj_data;

int main()
{
    obj_data.hardware_id        = 1;
    obj_data.id_software        = 1;
    obj_data.id_led_light       = 50;
    obj_data.id_adc             = 40;
    obj_data.id_adc_precision   = 27;
    obj_data.battery_voltage    = 50;
    obj_data.id_motor           = 0;

    printf("[%x][%x][%x][%x]",id_hardware , obj_data.hardware_id, id_battery, obj_data.battery_voltage);

对于上面的代码,我将数据发送为:

十六进制:[1] [1] [6] [32]

二进制:00000001 00000001 00000110 00100000

我的真正意图是收到这样的消息:

[8] [4C] [40]

二进制: 00001 00001 00110 0 0100000 0 < / strong>

0 个答案:

没有答案