gpt4 book ai didi

c++ - 将 char[] 类型转换为结构并检索结构的值。?

转载 作者:行者123 更新时间:2023-11-30 02:50:09 26 4
gpt4 key购买 nike

#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

最佳答案

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

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

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

unsigned char str[sizeof(struct mystruct)];

struct mystruct* obj = (void *)str;

要了解 strobj 内容之间的转换,您需要准确了解编译器如何填充结构以及每个成员的大小和计算机的字节顺序。

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

关于c++ - 将 char[] 类型转换为结构并检索结构的值。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com