У меня есть функция foo (void * pBuf). Мне нужно передать ему 64-битный адрес, но я не могу получить правильный тип, когда я передаю значение.Аргумент типа uint64_t несовместим с параметром типа void *
Пример: foo (адрес). Where- uint64_t address = 0x00000000DEADBEEF
EDIT: Компиляция с использованием компилятора ARM.
uint64_t foo(void *pBuf){
uint64_t retAddr = (uint64_t) pBuf;
retAddr += 0x100000;
return retAddr;
}
Я на 32-битном ARM и sizeof(void *)
является 4
Разъяснение: Почему мне нужен 64-битный адрес, на 32-битном ARM? Поскольку моя карта памяти использует 36-битную адресацию.
Адрес - это локальная переменная, которая содержит адрес, который мне нужен. –
Вам нужно будет предоставить более подробную информацию о какой системе вы находитесь и что делает функция 'foo' с ее аргументом –
В чем проблема в вашем последнем примере кода? Единственная проблема, которую я могу догадаться, состоит в том, что некоторые компиляторы будут выдавать предупреждения путем литья непосредственно из 'void *' в 'uint64_t'. В таком случае предпочитайте двойное нажатие: '(uint64_t) (size_t)' – Cyan