- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图使用 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
数组来创建数字的字符串表示形式。
然后,您可以执行以下两项操作之一:
sprintf
轻松将数字格式化为字符串。关于C编程: write() integers to a text file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432674/
我是一名优秀的程序员,十分优秀!