在不知道结构的情况下将字符串拆分为结构

split string into struct without knowing structure

我有 8 个字节的带标志的字符串,其中一些是布尔值,一些是字符。我想要的是在我的代码中访问它的名称标记,比如 myStruct.value1

我根据自己的意愿创建了一些结构。我希望我可以将字符串拆分为该结构,因为它们的总大小均为 64 位。

// destination
typedef struct myStruct_t {
  uint8_t  value1  : 8;
  uint8_t  value2  : 8;
  uint16_t value3  : 16;
  uint8_t  value4  : 8;
  uint8_t  value5  : 1;
  uint8_t  value6  : 1;
  uint8_t  value7  : 1;
  uint8_t  value8  : 1;
  uint8_t  value9  : 1;
  uint16_t value10 : 11;
  uint8_t  value11 : 8;
} myStruct_t;

// source
char buf[8] = "12345678";

// read about strcpy and memcpy but doesn't work
memcpy(myStruct, buf, 8);

但是它不起作用,我收到以下错误消息:

error: cannot convert 'myStruct_t' to 'void*' for argument '1' to 'void* memcpy(void*, const void*, size_t)'
     memcpy(myStruct, buf, 8);
                            ^

如果我理解正确,我会先将 8 字符缓冲区转换为二进制。然后,您可以从中提取您想要的每个值的长度的子字符串。最后,您可以将二进制字符串转换为它们的数值。

此外,您应该将 char 数组的大小设置为 9。空终止符需要一个额外的字符。您目前使用的方式无法编译。

memcpy 期望它的前两个参数是指针。

像您的 buf 这样的数组将隐式衰减为指针,但您的类型 myStruct_t 不会。

myStruct_t myStruct;
memcpy(&myStruct, buf, 8);
//     ^ produces a POINTER to myStruct