【问题标题】:File Size to store an integer存储整数的文件大小
【发布时间】:2014-04-21 10:32:55
【问题描述】:

我想以减小文件大小的方式将整数(例如 - 222222)写入文本文件。如果我以字符串的形式写入整数,由于存在六个字符,它需要 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;
}

【问题讨论】:

  • 请发布您的代码
  • 尝试在编辑器中打开文件并查看存储的内容。
  • 我在 Notepad++ 中打开了 now.txt 文件。它显示“222222”。

标签: c++ string file integer


【解决方案1】:

当您将整数写入整数时,该文件将转换为二进制文件。

在读写二进制文件时,需要注意paddingsbyte order等。 另一种方法是纯文本,您可以将其读取为字符串,并在库的帮助下将其转换为整数。

【讨论】:

    【解决方案2】:

    这里是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 个字节。

    【讨论】:

    • 如果我想进一步压缩数字,我应该使用什么其他技术。将数字转换为任何其他基础有帮助吗?
    • @Hellboy,我认为你不能再压缩一个数字了。但是对于大量数据有一种解决方法:您可以先写入数据,然后使用一些库(例如 zip)压缩它们。让专业图书馆做这项工作可能是最好的解决方案。
    【解决方案3】:

    这背后有一个简单的原因。

    每当我们写入文件时,它都会以字符形式存储。因此,当您将整数 222222 写入文件时,它会逐个字符地写入,而不是整数。

    【讨论】:

    • @Muhammad 那么,我能做些什么来减少将整数存储在文件中所需的内存量?
    • 我不知道你是否可以进一步缩小尺寸。尝试以二进制存储,这可能会或可能不会减少大小
    • @Hellboy,看看答案,fwrite 会缩小尺寸。
    • 以二进制存储不会减小大小。但是使用 fwrite() 将大小减少到 4 个字节。
    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2021-12-02
    • 2012-07-28
    • 2011-03-14
    • 1970-01-01
    • 2012-11-10
    • 2014-04-15
    相关资源
    最近更新 更多