如何在 C 中使用 write() 函数写入整数?

Mat*_*les 2 c command integer

我是 C 菜鸟,尝试使用write()函数来显示整数。

这是我的代码:

int n = 7;
write(1, &n, 4);
Run Code Online (Sandbox Code Playgroud)

我想显示7,但是当我设置为一个大数字时,程序不显示任何内容或其他奇怪的字符n

我缺少什么?

Eri*_*hil 10

类似的对象int在内存中用不同的位表示。该write例程将这些内存位准确地传输到其目的地。

\n\n

终端并非设计用于显示任意内存位。它们不会将这些位解释为一个int或其他对象,然后显示该解释。一般来说,我们向终端传输字符。更具体地说,我们发送代表字符的代码。终端被设计为接收这些代码并显示小文字图片(字符、字形、表情符号等)。

\n\n

要使终端显示 \xe2\x80\x9c7\xe2\x80\x9d,我们需要向其发送 \xe2\x80\x9c7\xe2\x80\x9d 的代码。字符的通用代码系统是 ASCII(美国信息交换标准代码)。\xe2\x80\x9c7\xe2\x80\x9d 的 ASCII 代码是 55。因此,如果您这样做:

\n\n
char x = 55;\nwrite(1, &x, 1);\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果使用 ASCII,终端将在其显示屏上绘制 \xe2\x80\x9c7\xe2\x80\x9d。

\n\n

write用于显示int值供人类阅读的错误例程也是如此。相反,您通常使用printf,如下所示:

\n\n
printf("%d", n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

in代表.f​ 它检查表示值的位,并将表示的值格式化为供人类阅读的字符,然后将这些字符写入标准输出。printfformattedn

\n\n

如果您想使用write将字符传输到终端,您可以使用sprintf只获取格式部分printf而不获取打印部分。对于初学者来说,这段代码可以工作:

\n\n
char buffer[80];                            // Make space for sprintf to work in.\nint LengthUsed = sprintf(buffer, "%d", n);  // Format n in decimal.\nwrite(1, buffer, LengthUsed);               // Write the characters.\n
Run Code Online (Sandbox Code Playgroud)\n\n

(更复杂的代码将使缓冲区大小适应所需的大小sprintf。)

\n