Я пытаюсь использовать stdout stream
для печати 0x00000000
вместо (nil)
и 0x08ffffff
вместо 0x8ffffff
.
В общем, char *ptr1 = 0x00000000
и char *ptr2 = 0x08ffffff
.
Когда я бегу
printf("start of address is %p and end of address is %p", ptr1, ptr2);
я получил
start of address is (nil) and end of address is 0x8ffffff
Я действительно нашел способ обойти это, и я действительно сделал бы это:
char *ptr1 = 0x00000000;
char *ptr2 = 0x08ffffff;
printf("start 0x%08x and end 0x%08x\n",ptr1, ptr2);
Это генерирует
start 0x00000000 and end 0x08ffffff
Однако компилятор отправляет следующее предупреждение:
warning: format ‘%x’ expects argument of type ‘unsigned int’,
but argument 3 has type ‘void *’ [-Wformat=]
Как мне изменить printf, чтобы настроить вывод на печать?
(sizeof u * CHAR_BIT + 3) / 4
, чтобы он работал на моем компьютере с 9-битным символом / 18-битным адресом :-P 02.02.2021uintptr_t
. В этом случае мы можем перебирать байты числа (полученного любым желаемым методом), печатая два кусочка за раз 02.02.2021CHAR_BIT
нам пришлось бы написать код, который обрабатывает шестнадцатеричные цифры, разделенные по «байтам» реализации, т. Е. Поддерживать буфер сдвига битов . Или иным образом разместить байты нечетного размера. Я думаю, что не буду заходить так далеко прямо сейчас. 02.02.2021