我想以一种减小文件大小的方式将一个整数(例如ex - 222222)写入文本文件。如果我以字符串的形式写整数,它需要6个字节,因为有6个字符。如果我以整数的形式存储这个整数,它还是需要6字节。为什么文件大小不等于4字节,因为int需要4字节?
#include <iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main()
{
//char* x = "222222.2222";
//double x = 222222.2222;
int x = 222222;
FILE *fp = fopen("now.txt","w");
fprintf(fp,"%d",x);
return 0;
}
下面是fprintf的定义:
writes the C string pointed by format to the stream.
所以无论你传递给函数什么,它们都被视为string
,这是包含222222
存储的输出文件。
如果您想在文件中存储integer
而不是string
,您可以使用:fwrite
。
int x = 222222;
FILE *fp = fopen("now.txt","w");
fwrite(&x, sizeof(int), 1, fp);
如果您将编辑器更改为十六进制模式,则文件存储:0E 64 03 00
。4字节。
这背后的原因很简单。
无论何时写入文件,它都以字符的形式存储。所以当你在文件中写入整数222222时它是一个字符一个字符地写入而不是一个整数
当您将integer写入integer时,该文件将转换为二进制文件。
当你写和读二进制文件时,需要注意填充、字节顺序等。另一种方式是纯文本,您将其作为字符串读取,并在库的帮助下将其转换为整数。