gpt4 book ai didi

C编程: write() integers to a text file

转载 作者:行者123 更新时间:2023-11-30 18:23:25 25 4
gpt4 key购买 nike

我试图使用 write() 系统调用在文本文件上写入几个整数,但除了数字之外,我得到了奇怪的符号 (00\00\00\00\00\00 )。

Gedit 告诉我编码有问题并且文件不是 UTF-8。我正在使用 gcc 进行编译,默认情况下它应该设置 UTF-8 编解码器。我通过将 sizeof(i) 更改为 1 解决了“\00”问题,但我无法解析数字。

int main(int argc, char const *argv[]) {
int fd=open("test.txt", O_RDWR | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR);
int i = 2;
write(fd, &i, sizeof(i)); }

最佳答案

您必须了解数字在计算机中的表示方式:当您在屏幕上读取 2 时,内存中实际保存的是数字 50。

这是 ASCII table 中字符 2 的代码.

实际的数字 2 并不对应于可打印字符,即您可以在屏幕上读取的符号,因此不同的文本编辑器(例如 Gedit)的行为会有所不同:有些会显示正方形或点,其他会显示数字有些像“\”字符一样转义。

UTF-8 实际上向后兼容 ASCII,因为它为英文字母、数字和其他一些字符提供了与 ASCII 相同的代码。

整数变量保存计算机可以执行计算的实际数字,而不是人类可以读取的字符。

如果您使用的是 32 位操作系统,C 中的 int 将是 32 位或 4 个字节。由于您很可能使用 x86 处理器,因此该数字将在 little-endian 中重新发送。订单。

因此,当您使用代码将这些字节写入文件时,该文件在磁盘上将如下所示:

+---+---+---+---+
| 2 | 0 | 0 | 0 |
+---+---+---+---+

Gedit 会尝试将其读取为 4 个字符,但它无法打印它们,因此它会向您显示它们的值,前面带有 '\' 字符,这样您就会知道这些是特殊的不可打印字符。

有两种方法可以使用 write() 并仍然获得您想要的文本表示形式。
首先,您需要一个 char 数组来创建数字的字符串表示形式。

然后,您可以执行以下两项操作之一:

  1. 作弊并使用 sprintf 轻松将数字格式化为字符串。
  2. 使用循环和一些简单的数学运算自行完成这项工作,并将数字中的每个十进制数字转换为其 ASCII 字符。
    这里有一个提示:只需添加 0x30(十六进制 30)

关于C编程: write() integers to a text file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com