我想要相当于
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
。
答案 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
修改强>
int a = 1234;
现在将其转换为char* b
:
算法:
for each digit in a:
b.append(digit+'0')
char
是8 bits == byte
的容器,可以是数字,ASCII中的字母或者你想在8位内表示的任何内容