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

C如何访问未对齐内存中的值,c,memory-alignment,C,Memory Alignment,我有一块内存,其中包含数据,我如何访问数据,即使它未对齐,独立于平台?数据主要是8位和32位的值。如果您想要完全独立于平台,请声明一个无符号字符*以指向内存,拾取字节,并使用“|”和“您可以将其memcpy设置为对齐的: void f(void *var_16bit_alignment) { uint16_t v; memcpy(&v, var_16bit_alignment, sizeof(v); // access to v are aligned now! } 请注意

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

如果您想要完全独立于平台,请声明一个
无符号字符*
以指向内存,拾取字节,并使用“|”和“您可以将其memcpy设置为对齐的:

void f(void *var_16bit_alignment) {
  uint16_t v;
  memcpy(&v, var_16bit_alignment, sizeof(v);
  // access to v are aligned now!
}
请注意,将
uint16\u t*
用作参数的类型已经是未定义的行为,并且可以根据您的需要调整v的类型(
uint32\u t
,…)。还要注意的是,这并不处理endianess,但可以使用
ntohs
或类似工具轻松展开

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