#include <unistd.h> // Prototype of write()
size_t my_putchar(char c) // Function for writing to standard output
{
if (write(1, &c, 1) == -1)
return (0); // Returns 0 because no char has been written
return (1); // Returns 1 because a char has been written
}
size_t my_puthex(unsigned long long nb, short toUp)
{
size_t len = 0;
const char *base = (toUp == 1) ? "0123456789ABCDEF" : "0123456789abcdef"; // If toUp is 1, the letters will be displayed in uppercase, otherwise in lowercase.
if (nb < 16) { // If the number is less than 16, simply write the corresponding char by calling `putchar()`
len += my_putchar(base[nb]);
return (len);
} else { // Recursively call the puthex() function to write the characters 1 by 1.
len += my_puthex(nb / 16, toUp);
len += my_bputchar(base[nb % 16]);
}
return (len); // Returns the number of chars written
}
字符串 使用方法:
my_puthex(1724, 0); // Write 1724 in hexadecimal in lower case
my_puthex(1724, 1); // Write 1724 in hexadecimal in upper case
3条答案
按热度按时间nhaq1z211#
下面是一个函数的例子,它可以做到这一点:
字符串
使用方法:
型
输出量:
型
但是,输入值必须是无符号整数。如果可以包含
<stdbool.h>
,也可以将toUp
替换为bool。8fsztsew2#
还有这个
字符串
简单地说,
long long
的大小是8个字节,转换为16个ASCII数字。i
被分配为8个字节的两倍。出现一个大小为8个字节的缓冲区,从它的 end 到它的 beginning,用16个ASCII数字循环填充。(前导零来自同一个源,对处理器来说只是稍微多一点的练习。)然后,简单地用一个write()
按顺序输出这些数字。三个变量,一个循环,没有递归。
有义务@chux指出一些代码调整。
lxkprmvk3#
我编写了一个
print_pointer
函数,它的功能与printf("%p",pointer)
完全相同字符串