仅使用write()进行写入,以文本形式将整数写入stdout

时间:2016-01-07 17:24:52

标签: c int system-calls

我正在尝试在文本形式的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 modebinary mode在计算机科学中很常见,但这里提醒那些不明白我的意思的人text form

  

在UNIX系统上,当应用程序从其获取的文件中读取时   确切地说,磁盘上的文件是什么,反之亦然   写作。在DOS / Windows世界中,情况有所不同   文件可以以两种模式之一打开,二进制或文本。在二进制文件中   模式系统的行为与UNIX完全相同。但是在写文字时   模式,NL(\ n,^ J)转换为序列CR(\ r,^ M)NL。

来自Cygwin.com

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;
}

1 个答案:

答案 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));