Я пытаюсь выполнить некоторую упаковку битов для передачи данных в небольшом возможном формате, но я не уверен, как его заархивировать, я начал со структуры 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);
для приведенного выше кода. Я отправляю данные в виде:
hex: [1] [1] [6] [32]
двоичный: 00000001 00000001 00000110 00100000
, где мое реальное намерение получает что-то вроде этого:
[8] [4C] [40]
двоичный: 00001 00001 00110 0 0100000 0