首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >0x7fff是什么意思?C语言

0x7fff是什么意思?C语言
EN

Stack Overflow用户
提问于 2020-07-09 14:49:24
回答 2查看 1.1K关注 0票数 1

我已经创建了将内存地址打印到stdout的函数,但是它将同样的工作方式作为printf("%p",.)。例如,printf给出了以下内容: 0x7fff58a2d2bb,但我的函数输出如下所示: 58a2d2bb。我知道0x的意思,但不能理解7fff的意思。有人能解释一下这个部分是什么意思吗?我如何将它添加到我的代码中:

代码语言:javascript
复制
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] = '\0';
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-09 19:36:28

0x7fff是什么意思?

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

OP的原始ft_itoa_base()还没有完全uintmax_t就绪,给出了one of the variables was int instead of uintmax_t

这导致输出输出被截断的地址为"58a2d2bb“,而不是正确的"7fff58a2d2bb”。

发布的修正后的ft_itoa_base()有一些小缺点。

代码语言:javascript
复制
// 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;

  ...
票数 1
EN

Stack Overflow用户

发布于 2020-07-09 14:59:04

0x7fff58a2d2bb是以十六进制(或基16)格式表示的140,734,680,453,819,其中数字a表示10,b表示11,而f表示15。

对于内存地址,基16或十六进制格式比基10更可取,因为16是2的幂,这使得它便于作为位掩码查看,而10则不便于从位掩码的角度来查看。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62817593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档