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 位数据已经对齐(除非您使用的是非常奇怪的平台)。
我有一块内存,其中包含数据,我如何访问数据,即使它未对齐,独立于平台?数据主要是 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 位数据已经对齐(除非您使用的是非常奇怪的平台)。