我正在尝试在文本形式的stdout中写一个整数,只有write()函数,可能还有/ if。
我想以文本形式写出整数,因此它是人类可读的,但实际上是以二进制形式写出来的:
以下是我的尝试:
main.c:
#include "my_put_nbr.h"
int main()
{
my_put_nbr(43);
return 0;
}
my_put_char.c:
#include <unistd.h>
int my_put_nbr(int nb)
{
write(1, &nb, sizeof(nb));
return 0;
}
那么我怎么能用只有write(或putchar)和条件的文本形式写出整数呢?
PS:我不能使用其他库,所以我不能使用printf或其他什么!
我的github:link
text mode
和binary mode
在计算机科学中很常见,但这里提醒那些不明白我的意思的人text form
:
在UNIX系统上,当应用程序从其获取的文件中读取时 确切地说,磁盘上的文件是什么,反之亦然 写作。在DOS / Windows世界中,情况有所不同 文件可以以两种模式之一打开,二进制或文本。在二进制文件中 模式系统的行为与UNIX完全相同。但是在写文字时 模式,NL(\ n,^ J)转换为序列CR(\ r,^ M)NL。
MAJ:
我找到了答案:
#include "my_putchar.h"
/* 0x2D = '-'
* 0x0 = NUL */
int my_put_nbr(int n)
{
if (n < 0)
{
my_putchar(0x2D);
n = -n;
}
if (n > 9)
{
my_put_nbr(n/10);
}
my_putchar((n%10) + '0');
return 0;
}
答案 0 :(得分:3)
写是写,但它写的是不可见的字符。 您可以通过以下方式看到:
./myprogram | od -tx1
您需要将 n (int值23)中的数字输入字符串&#34; 23&#34;在打印之前。
一种方式:
char buffer[16];
snprintf(buffer, sizeof(buffer), "%d", n);
write(1, buffer, strlen(buffer));