0

我想拥有相当于

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

4 回答 4

2

考虑这个数字155,如果你除以1001,余数是55,除以10你得到510,余数是5,除以1你得到5。现在连接这些数字 1-5-5 你得到最终的数字。这应该让你开始。

于 2012-11-03T13:53:13.603 回答
1

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

解决方案有两个部分:

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

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

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

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

于 2012-11-03T13:52:34.947 回答
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;
}
于 2012-11-03T13:56:03.020 回答
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

在此处输入图像描述

编辑:

int a = 1234;

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

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

你必须明白它char是一个容器,8 bits == byte可以是一个数字、ASCII 中的一个字母或任何你想在 8 位内表示的东西

于 2012-11-03T13:57:52.313 回答