0x7fff 是什么意思? C语言

What does 0x7fff mean? C language

我已经创建了将内存地址打印到标准输出的函数,但它的工作方式与 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] = '[=10=]';
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);

0x7fff58a2d2bb140,734,680,453,819 以十六进制(或基数 16)格式表示,其中数字 a 表示 10,b 表示 11,最多 [=14] =] 表示 15.

对于内存地址,以 16 为基数或十六进制格式优于以 10 为基数的格式,因为 16 是 2 的幂,这使得它可以方便地作为位掩码查看,而 10 则不是,这使得很难根据位掩码查看.

What does 0x7fff mean?

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

OP 的原始 ft_itoa_base() 未完全 uintmax_t 就绪

这导致输出打印截断的地址“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;

  ...