类似的对象int
在内存中用不同的位表示。这write
例程将这些内存位准确地传输到其目的地。
终端并非设计用于显示任意内存位。他们不会将这些位解释为int
或其他对象,然后显示该解释。一般来说,我们传输人物至终端。更具体地说,我们发送代表字符的代码。终端被设计为接收这些代码并显示小文字图片(字符、字形、表情符号等)。
要使终端显示“7”,我们需要向其发送“7”的代码。字符的通用代码系统是 ASCII(美国信息交换标准代码)。 “7”的 ASCII 代码是 55。因此,如果您这样做:
char x = 55;
write(1, &x, 1);
如果使用 ASCII,则终端将在其显示屏上绘制“7”。
So write
用于显示的例程是错误的int
人类阅读的价值观。相反,您通常使用printf
, 像这样:
printf("%d", n);
The f
in printf
代表formatted
。它检查代表值的位n
并将表示的值格式化为供人类阅读的字符,然后将这些字符写入标准输出。
如果你想使用write
要将字符传输到终端,您可以使用sprintf
只获取格式部分printf
没有印刷部分。对于初学者来说,这段代码可以工作:
char buffer[80]; // Make space for sprintf to work in.
int LengthUsed = sprintf(buffer, "%d", n); // Format n in decimal.
write(1, buffer, LengthUsed); // Write the characters.
(更复杂的代码将使缓冲区大小适应所需的大小sprintf
.)