使用write syscall打印整数

时间:2012-11-03 13:27:34

标签: c

我想要相当于

void print3( char a, uint8_t b, int8_t c )
{
    printf("%c %" PRIu8 " %" PRIi8 "\n", a, b, c);
}

使用write系统调用。问题是,我不知道如何使用write打印整数。仅允许来自ANSI C的命令,并禁止使用sprintf格式化字符串。

使用write的示例语法:

const char msg[] = "Hello World!";
write(STDOUT_FILENO, msg, sizeof(msg)-1);

修改:我不允许使用sprintf itoa

4 个答案:

答案 0 :(得分:2)

考虑号码155,如果除以100,那么1为100,其余为55,除以10得到5 1}} 10s,余数为5,除以1得到5。现在连接这些数字1-5-5你得到最后的数字。这应该让你开始。

答案 1 :(得分:1)

要打印的数字的每个数字都表示为一个字符。

解决方案有两个部分:

  • 计算所选基数中的数字位数,10我假设在这种情况下

  • 将数字转换为字符并将其写入

对于计算数字的步骤,您将使用/%运算符;这将以“反向”顺序给出数字,因此在编写之前你需要将它们松开。

要将数字转换为字符,请考虑两种方法:简单算术(使用ASCII字符值)或数组查找。

答案 2 :(得分:1)

您必须自己进行转换。下面的代码转换为ASCIIZ(C字符串),而不是简单的ASCII,但它是可用的:

int ltoa(long x, char *str, size_t str_size)
{
    long y = 1;
    size_t i, s;
    for (s = 0; y < x; s++)
        y *= 10;
    if (str_size < s+1)
        return s+1;
    str[s--] = 0x0;
    while(s)
    {
            str[s--] = '0' + (x % 10);
            x /= 10;
    }
    str[0] = '0' + x;
    return 0;
}

答案 3 :(得分:1)

您知道9(in ascii) == '0' + 9

吗?
char a =0;
a = '0';
printf("%c",a); //will print 0
a = '0' + 8; 
printf("%c",a);//will print 8

enter image description here

修改

int a = 1234;

现在将其转换为char* b: 算法:

for each digit in a:
   b.append(digit+'0')

你必须明白char8 bits == byte的容器,可以是数字,ASCII中的字母或者你想在8位内表示的任何内容