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;
}

 

posted @ 2025-11-20 10:53  www378660084  阅读(3)  评论(0)    收藏  举报