C语言非对齐访问解决方法
部分嵌入式CPU不支持非对齐访问,可以加个宏转换成packed方式按字节来访问
#include <stdio.h> #include <stdint.h> #define PACK_RW(x) ((struct{typeof(x) val;}__attribute__((packed))*)&(x))->val typedef struct{ int a; int b; }test_t; int main() { uint8_t data[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00}; test_t* p = (test_t*)&data[1]; int a = PACK_RW(p->a); int b = PACK_RW(p->b); printf("a: %x, b: %x\n", a, b); PACK_RW(p->a) = 10; PACK_RW(p->b) = 20; a = PACK_RW(p->a); b = PACK_RW(p->b); printf("a: %x, b: %x\n", a, b); return 0; }
浙公网安备 33010602011771号