【发布时间】:2019-10-19 12:30:58
【问题描述】:
将定义结构中的 32 位指针传递给新的 ARM 64 位处理器
试图从使用 32 位指针结构的旧代码中读取,该结构在另一块硬件中的 32 位处理器中创建,该结构在使用 64 位指针的 64 位处理器的公共内存区域中传递。
struct _32bit_addr_ptr
{
unsigned int *addr1;
unsigned int *addr2;
unsigned int *addr3;
}test;
test.addr1 = 0x12345678;
test.addr2 = 0x23456781;
test.addr3 = 0x34567812;
所以数据看起来像这样。
大端的数据块看起来像:
1234 5678 2345 6781 3456 7812
如果我在 64 位指针中使用相同的结构,那么每个地址当然会使用 8 个字节,并且不会给出正确的结果。
有没有办法在结构中定义64位处理器中的结构,而不必使用不使用指针的结构和结构外的强制转换来翻译它?
struct _32bit_address
{
unsigned int addr_value1;
unsigned int addr_value2;
unsigned int addr_value3;
}test2;
unsigned long long Addr_ptr = (unsigned long long *)(test2.addr_value1)
【问题讨论】:
-
您有一个公共内存区域同时被一个 32 位处理器和一个 64 位处理器访问?还是说要将原始 32 位代码移植到单独的 64 位硬件?
标签: c pointers arm 32bit-64bit