Разрешить преобразование из целого в меньший указатель предупреждение без объединения - PullRequest
0 голосов
/ 01 марта 2019

Когда я делаю это назначение:

const uint8_t *p = (uint8_t *)(uint64_t address);

я получаю

conversion from integer to smaller pointer warning 

Поэтому я хочу сохранить указатель uint8_t из целого числа uint64_t.Я не могу изменить ни один из типов.

LE: поэтому весь код выглядит следующим образом

typedef token{
const uint8_t *pTr;
}token;

typedef key{
uint64_t srcAddress;
}key;

в функции, которая получает указатели на обе структуры в качестве входных данных, я хочу сделать:

token->pTr = key->srcAddress

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Вы хотите получить значение адреса в массиве с 8 8-битными элементами?Если вы хотите сделать это, вы можете сделать так:

uint64_t address;
uint8_t* p;
p = &address;

, а затем вы можете использовать p в качестве массива.

0 голосов
/ 01 марта 2019

Здесь получаем адрес памяти как переменную и присваиваем другому указателю.

    uint8_t *a = (uint8_t*)malloc(sizeof(uint8_t));
    uint64_t address = (uint64_t)a;
    uint8_t *b = (uint8_t*)address;
    *b = 10;
    printf("%d\n", *a);

Выходы 10, поэтому a == b и адрес в памяти address.

0 голосов
/ 01 марта 2019

Если у вас есть переменная uint64_t в вашей программе, правильный способ сделать это:

uint64_t address = ...;
const uint8_t *p = (uint8_t *)(&address);

Это также хорошая идея, чтобы иметь в виду порядковый номер процессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...