C 如何访问未对齐内存中的值

C How can i access values in misaligned memory

我有一块内存,其中包含数据,我如何访问数据,即使它未对齐,独立于平台?数据主要是 8 位和 32 位值。

如果你想要完全的平台独立性,声明一个unsigned char *指向内存,获取字节,并使用'|'和 assemble 值所需的“<<”。

你可以 memcpy 到对齐的:

void f(void *var_16bit_alignment) {
  uint16_t v;
  memcpy(&v, var_16bit_alignment, sizeof(v);
  // access to v are aligned now!
}

请注意,使用 uint16_t * 作为参数的类型已经是未定义的行为,可以根据您的需要调整 v 的类型(uint32_t,...)。另请注意,这不涉及字节顺序,但可以很容易地用 ntohs 或类似的方式扩展。

为了完整起见,8 位数据已经对齐(除非您使用的是非常奇怪的平台)。