0x7fff是什么意思?C语言



我制作了一个函数,它将内存地址打印到stdout,但它的工作方式与printf不同("%p&",…(。例如,printf给我的是:0x7fff58a2d2bb,但我的函数打印的是:58a2d2bb。我知道0x的意思,但不明白7fff的意思。有人能解释一下这个部分是什么意思吗?我如何将它添加到我的代码中:

char *ft_itoa_base(uintmax_t num, uintmax_t base){
int i;
uintmax_t val_cp;
uintmax_t rem;
char *str;
val_cp = num;
i = 1;
while((val_cp /= base) >= 1)
i++;
str = ft_strnew(i); // Basically what it does (char*)malloc(sizeof(char) * (i + 1))
str[i] = '';
while(i-- > 0)
{
rem = num % base;
str[i] = (rem > 9)? (rem-10) + 'a' : rem + '0';
num /= base;
}
return (str);}
char a = 'x';
void* p0 = &a;
uintmax_t i = (uintmax_t)p0;
ft_putstr(ft_itoa_base(i, 16));
ft_putchar('n');
printf("PrintF: %p", p0);

0x7fff是什么意思?

缺少的"0x7fff";是ft_itoa_base()的错误代码中丢失的正确十六进制地址的一部分。

OP的原始ft_itoa_base()并没有完全准备好uintmax_t,因为其中一个变量是int而不是uintmax_t。

这导致输出打印一个截断的地址"0";58a2d2bb";而不是正确的";7fff58a2d2bb";。


张贴的更正ft_itoa_base()有一些小弱点。

// char* ft_itoa_base(uintmax_t num, uintmax_t base) {
// No need for base to be so wide with uintmax_t
char* ft_itoa_base(uintmax_t num, int /* or unsigned */ base) {
int i;
uintmax_t val_cp;
// uintmax_t rem;
// No need for rem to be so wide with uintmax_t
int /* or unsigned */ rem;
char *str;
...

0x7fff58a2d2bb是以十六进制(或十六进制(格式表示的140,734,680,453,819,其中数字a表示10,b表示11,最多为表示15的f

对于存储器地址,基16或十六进制格式比基10更可取,因为16是2的幂,这使得它便于作为位掩码查看,而10不是,这使得很难根据位掩码查看。

最新更新