gpt4 book ai didi

c - 在 64 位处理器中读取 32 位指针的结构

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:55 26 4
gpt4 key购买 nike

将定义结构中的 32 位指针传递给新的 ARM 64 位处理器

尝试从使用在 32 位处理器中创建的 32 位指针结构的遗留代码读取另一个硬件,该硬件通过使用 64 位指针的 64 位处理器传递到公共(public)内存区域。

struct _32bit_addr_ptr 
{
unsigned int *addr1;
unsigned int *addr2;
unsigned int *addr3;
}test;
test.addr1 = 0x12345678;
test.addr2 = 0x23456781;
test.addr3 = 0x34567812;

所以数据看起来像这样。
big endian 中的数据 block 如下所示:

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)

最佳答案

指针应与寻址区域一样宽,因此在您的情况下它们必须是 64 位的。

但是,如果这些结构是由某个例程动态生成的,您可以尝试将它们转换为 64 位基地址的偏移量,如果偏移量小于 65536,则为 32 位或更好的 16 位偏移量。

尽管如此,您必须同时修改地址生成器和使用这些结构的地址生成器。

其他任何事情都是不可能的。

要么你接受 64 位指针,要么你在周围做了大量的修改。

关于c - 在 64 位处理器中读取 32 位指针的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56436049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com