我对代码中发生的事情感到困惑,我不明白为什么。
我有一个来自某些硬件的内存缓冲区给我。我想通过在内存顶部放置一个结构来将自己偏移到内存中,这样我就可以简单地访问结构。但是有些数据只是整数的标题,所以我正在做以下几点:
如果我执行以下操作,原始数据为void *,以及数据进入的位置:
uint32_t * data = (uint32_t * ) raw_data;
如果我尝试通过*数据访问它,我会得到垃圾值。
现在,如果我定义如下的结构:
typedef struct incoming_data __attribute__((__packed__))
{
uint32_t dat;
} incoming_data
并通过以下方式访问它:
incoming_data * data = (incoming_data *) raw_data;
然后通过data-> dat访问它我得到正确的值!
我检查了上面两个指针相同的地址。有人可以解释我做错了什么。
提前致谢。