在一个任务中,我需要将十六进制的指针地址打印到标准输出中.问题是我只允许包括unistd.h
,所以不允许printf
.
我试着把它塑造成一个角色*但演员阵容完全不可能实现.所以在这里帮忙会很受欢迎的.
它应该打印出这样的内容:
000000010a161f40
在一个任务中,我需要将十六进制的指针地址打印到标准输出中.问题是我只允许包括unistd.h
,所以不允许printf
.
我试着把它塑造成一个角色*但演员阵容完全不可能实现.所以在这里帮忙会很受欢迎的.
它应该打印出这样的内容:
000000010a161f40
我编写了一个print_pointer
函数,它的作用与printf("%p",pointer)
完全相同
#include <unistd.h>
void print_pointer(const void *p)
{
static const char *table = "0123456789abcdef";
unsigned long long value = (unsigned long long)p;
// 1 digit = 4 bits
char buffer[sizeof(void*)*2];
int i,idx = 0;
while(value)
{
int digit = value % 16;
buffer[idx++] = table[digit];
value /= 16;
}
// zero-padding
for (i=idx;i<sizeof(buffer);i++)
{
buffer[i] = '0';
}
// reversed print, as division computes lowest digits first
for (i=sizeof(buffer)-1;i>=0;i--)
{
write(1,buffer+i,1); // write 1 char to standard output
}
}
int main()
{
const char *data = "foo";
print_pointer(data);
return 0;
}