将 char[] 类型化到结构中并检索结构的值

Typecaste char[] into structure and retrieve the values of the structure.?

本文关键字:结构 检索 char 类型化      更新时间:2023-10-16
#include <iostream>  //      std::cout
using namespace std;
struct mystruct
{
        unsigned int a;
        unsigned char b;
        unsigned long long c;
};
 int main ()
{
        unsigned char str[1];
        unsigned int a,b,c;
        str[0]=1;  // str[0]=??????
        mystruct* obj = (mystruct *)(&(str[0]));
        c=obj->c;
        a=(unsigned int)obj->a;
        b=(unsigned int)obj->b;
        cout<<"a="<<a<<"t b="<<b<<"t c="<<c<<endl;
}

可以做上述事情吗?如果是,则:我应该str[0]填写什么才能获得a=1,b=257,c=1值?

目前我得到的输出如下:

a=1     b=0     c=8388449

除非你在具有非常定义的语义的编译器上为微控制器编码,否则你不应该这样做。原因是结构可以有填充,计算机可以是小端或大端,sizeof(int)在所有计算机上都不相同,char也不一定是 8 位。

除此之外,你的str无论如何都太短了。

虽然这在 C 语言中是未定义的行为,但在微控制器上,这些东西通常是明确定义的,可以使用。一个例子是:

unsigned char str[sizeof(struct mystruct)];
struct mystruct* obj = (void *)str;

要知道strobj内容之间的转换,你需要确切地知道你的编译器是如何填充结构的,以及每个成员的大小和计算机的字节序。

同样,除非在非常特定的位置,否则这种编码是完全错误的。