如何使用 write() 以十六进制形式写入指针地址的标准输出

问题描述 投票:0回答:1

在任务中,我需要将十六进制指针的地址打印到标准输出中。问题是我只允许包含

unistd.h
,所以不允许包含
printf

我尝试将其转换为 char* 但转换是完全不可能实现的。因此,在这里非常感谢您的帮助。

它应该打印类似这样的内容:

000000010a161f40
c pointers hex
1个回答
1
投票

这是一个执行此操作的函数示例:

size_t my_putchar(char c)
{
    if (write(1, &c, 1) == -1)
        return (0);
    return (1);
}

size_t my_puthex(unsigned long long nb, bool toUp)
{
    size_t len = 0;
    const char *base = (toUp) ? "0123456789ABCDEF" : "0123456789abcdef";
    if (nb < 16) {
        len += my_putchar(base[nb]);
        return (len);
    } else {
        len += my_puthex(nb / 16, toUp);
        len += my_bputchar(base[nb % 16]);
    }
    return (len);
}

用途:

my_puthex(1724, false);
my_puthex(1724, true);

输出:

6bc
6BC

但是,输入值必须是无符号整数。

© www.soinside.com 2019 - 2024. All rights reserved.