C如何访问未对齐内存中的值
我有一块内存,其中包含数据,我如何访问数据,即使它未对齐,独立于平台?数据主要是8位和32位的值。如果您想要完全独立于平台,请声明一个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! } 请注意
无符号字符*
以指向内存,拾取字节,并使用“|”和“您可以将其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位数据已经对齐(除非您使用的是非常奇怪的平台)