将 char[] 类型化到结构中并检索结构的值
Typecaste char[] into structure and retrieve the values of the structure.?
#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;
要知道str
和obj
内容之间的转换,你需要确切地知道你的编译器是如何填充结构的,以及每个成员的大小和计算机的字节序。
同样,除非在非常特定的位置,否则这种编码是完全错误的。
相关文章:
- 如何在函数中检索指针结构
- 从C中的结构中检索值时编译误差
- 从保存变量数据类型的数据结构中检索值,而不指定返回类型
- 如何检索指向列表数据结构中的变量的指针?
- 如何保存未知大小的结构(供以后检索)
- 如何通过先前存储的ID从结构对象中检索值?C
- 结构"node"的迭代器不允许数据检索
- 高速缓存行检索和在大型数据结构上的性能
- 从 std::thread::id 结构中检索 Windows 线程标识符
- 将 char[] 类型化到结构中并检索结构的值
- 我应该使用哪些键值数据结构?按值快速检索和按键快速检索
- 从存储在 CTreeCtrl 的 LPARAM 中的结构中检索地址/指针 (IXMLDOMNode*) - 不起作用
- 检索数据结构对齐信息
- C++:用于高效插入和检索自定义数据的数据结构
- 从单独函数中的结构中检索数组成员
- 具有快速连续范围检索的数据结构
- 一种单一的数据结构,用于从脚本中读取任意类型的变量,以便在运行时进行检索和编辑
- 在MATLAB R2014a中使用engGetVariable检索结构体错误
- 存储和检索数据结构
- c++ STL中是否有数据结构可以对log(n)中的第k个元素进行插入、搜索和检索?