地址与整形转化(64bit32bit)

tech2025-12-20  5

问题

将32bit代码移动到64bit会因为地址与整形的转换而报警告,因为GCC开的限制很高,报警告报错,所以必须解决;

// 64bit os/gcc uint32_t data; // 32bit uint32_t *addr; // 64bit ... addr = (uint32_t *)data; // 警告 data = (uint32_t)addr; // 警告

解决

使用union进行地址转换;

uint32_t data; uint32_t *addr; static inline uint32_t LL2L(void *addr) { union { void *addr; uint32_t u32; } temp; temp.addr = addr; return temp.u32; } static inline void* L2LL(uint32_t data) { union { void *addr; uint32_t u32; } temp; temp.u32 = data; return temp.addr; } addr = (uint8_t *)L2LL(data); data = (uint8_t)LL2L(addr);
最新回复(0)