以定义的结构将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)
答案 0 :(得分:1)
指针必须与寻址区域一样宽,因此在您的情况下,指针必须为64位。
但是,如果这些结构是由某个例程动态生成的,则可以尝试将其转换为64位基址的偏移量,如果偏移量小于65536,则为32位或更好的16位偏移量。
为此,您必须同时修改地址生成器和使用这些结构的地址生成器。
没有其他事情是不可能的。
要么使用64位指针,要么在周围进行大量修改。