【发布时间】:2015-12-18 02:38:37
【问题描述】:
我有一个函数 foo(void* pBuf)。我需要传递一个 64 位地址,但是当我按值传递时,我似乎无法获得正确的类型转换。
示例:foo(地址)。其中- uint64_t 地址=0x00000000DEADBEEF
编辑:使用 ARM 编译器进行编译。
uint64_t foo(void *pBuf){
uint64_t retAddr = (uint64_t) pBuf;
retAddr += 0x100000;
return retAddr;
}
我在 32 位 ARM 上,sizeof(void *) 是 4
澄清:为什么我需要 32 位 ARM 上的 64 位地址? 因为我的内存映射使用 36 位寻址。
【问题讨论】:
-
address 是一个局部变量,其中包含我需要的地址。
-
您需要详细说明您使用的是哪种系统以及
foo函数对其参数的作用 -
你最新的代码示例有什么问题?我能猜到的唯一问题是某些编译器会通过直接从
void*转换为uint64_t来发出警告。在这种情况下,更喜欢双重转换:(uint64_t)(size_t) -
问题在于编译对 foo 的调用。不是函数本身。
-
如果
address不是以00000000开头,您期望会发生什么? (请记住,您正在尝试将地址放入 32 位void *)