#include <stdio.h>
#include <stdint.h>
struct __attribute__((packed)) cg_api_packet_header {
/// The API version (1 - 15; 4 bits).
uint32_t version : 4;
/// Whether the packet carries error information (1 bit).
uint32_t error_flag : 1;
/// The payload size (0 - 2047; 11 bits).
uint32_t payload_size : 11;
/// The message identifier (0 - 16383; 14 bits).
uint32_t message_id : 14;
/// The timestamp in milliseconds (0 - 999; 10 bits).
uint32_t timestamp_milliseconds : 10;
/// The timestamp in seconds (32 bits).
uint32_t timestamp_seconds : 32;
};
int main(void) {
struct cg_api_packet_header header = {
.version = 4,
.error_flag = 1,
.payload_size = 123,
.message_id = 247,
.timestamp_milliseconds = 0,
.timestamp_seconds = 111,
};
uint8_t* ptr = (uint8_t*)(&header);
printf("%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX", ptr
[0], ptr
[1], ptr
[2], ptr
[3], ptr
[4], ptr
[5], ptr
[6], ptr
[7], ptr
[8]);
}
CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CgpzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkgY2dfYXBpX3BhY2tldF9oZWFkZXIgewoKCS8vLyBUaGUgQVBJIHZlcnNpb24gKDEgLSAxNTsgNCBiaXRzKS4KCXVpbnQzMl90IHZlcnNpb24gOiA0OwoKCS8vLyBXaGV0aGVyIHRoZSBwYWNrZXQgY2FycmllcyBlcnJvciBpbmZvcm1hdGlvbiAoMSBiaXQpLgoJdWludDMyX3QgZXJyb3JfZmxhZyA6IDE7CgoJLy8vIFRoZSBwYXlsb2FkIHNpemUgKDAgLSAyMDQ3OyAxMSBiaXRzKS4KCXVpbnQzMl90IHBheWxvYWRfc2l6ZSA6IDExOwoKCS8vLyBUaGUgbWVzc2FnZSBpZGVudGlmaWVyICgwIC0gMTYzODM7IDE0IGJpdHMpLgoJdWludDMyX3QgbWVzc2FnZV9pZCA6IDE0OwoKCS8vLyBUaGUgdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyAoMCAtIDk5OTsgMTAgYml0cykuCgl1aW50MzJfdCB0aW1lc3RhbXBfbWlsbGlzZWNvbmRzIDogMTA7CgoJLy8vIFRoZSB0aW1lc3RhbXAgaW4gc2Vjb25kcyAoMzIgYml0cykuCgl1aW50MzJfdCB0aW1lc3RhbXBfc2Vjb25kcyA6IDMyOwoKfTsKCmludCBtYWluKHZvaWQpIHsKCglzdHJ1Y3QgY2dfYXBpX3BhY2tldF9oZWFkZXIgaGVhZGVyID0gewoJCS52ZXJzaW9uID0gNCwKCQkuZXJyb3JfZmxhZyA9IDEsCgkJLnBheWxvYWRfc2l6ZSA9IDEyMywKCQkubWVzc2FnZV9pZCA9IDI0NywKCQkudGltZXN0YW1wX21pbGxpc2Vjb25kcyA9IDAsCgkJLnRpbWVzdGFtcF9zZWNvbmRzID0gMTExLAoJfTsKCgl1aW50OF90KiBwdHIgPSAodWludDhfdCopKCZoZWFkZXIpOwoKCXByaW50ZigiJTAyaGhYICUwMmhoWCAlMDJoaFggJTAyaGhYICUwMmhoWCAlMDJoaFggJTAyaGhYICUwMmhoWCAlMDJoaFgiLCBwdHJbMF0sIHB0clsxXSwgcHRyWzJdLCBwdHJbM10sIHB0cls0XSwgcHRyWzVdLCBwdHJbNl0sIHB0cls3XSwgcHRyWzhdKTsKCQp9Cg==