将数字写入文件而不是读取它们的最佳解决方案是什么?

时间:2014-10-20 07:02:37

标签: c++ file-io binary

我有640 * 480个号码。我需要将它们写入文件。我稍后需要阅读它们。什么是最好的解决方案?数字在0到255之间。

对我来说,最好的解决方案是将它们写成二进制(8位)。我把数字写入txt文件,现在它看起来像1011111010111110 .....所以没有问题数字的开始和结束。

我该如何从文件中读取它们?

使用c ++

3 个答案:

答案 0 :(得分:1)

将1位和0位等值写入文本文件并不是一个好主意。文件大小将增加8倍。 1字节= 8位。你必须存储字节,0-255 - 是字节。因此,您的文件大小为640 * 480字节而不是640 * 480 * 8。文本文件中的每个符号最小为1个字节。如果要获取位,请使用您使用的编程语言的二元运算符。更容易读取字节。使用二进制文件保存数据。

答案 1 :(得分:0)

据推测,你有一些代表你形象的数据结构,里面某处有实际数据:

class pixmap
{
public:
    // stuff...
private:
    std::unique_ptr<std::uint8_t[]> data;
};

所以你可以添加一个新的构造函数,它接受一个文件名并从该文件中读取字节:

pixmap(const std::string& filename)
{
    constexpr int SIZE = 640 * 480;

    // Open an input file stream and set it to throw exceptions:
    std::ifstream file;
    file.exceptions(std::ios_base::badbit | std::ios_base::failbit);
    file.open(filename.c_str());

    // Create a unique ptr to hold the data: this will be cleaned up
    // automatically if file reading throws
    std::unique_ptr<std::uint8_t[]> temp(new std::uint8_t[SIZE]);

    // Read SIZE bytes from the file
    file.read(reinterpret_cast<char*>(temp.get()), SIZE);

    // If we get to here, the read worked, so we move the temp data we've just read
    // into where we'd like it
    data = std::move(temp); // or std::swap(data, temp) if you prefer
}

我意识到我已经在这里假设了一些实现细节(你可能没有使用std::unique_ptr存储底层图像数据,尽管你应该这样做)但希望这足以让你开始。

答案 2 :(得分:0)

您可以在0-255之间打印数字作为文件中的字符值。 请参阅以下代码。在这个例子中,我将整数70打印为char。 因此,这导致印刷品为&#39; F&#39;在控制台上。 类似地,您可以将其读取为char,然后将此char转换为整数。

#include <stdio.h>

int main()
{

    int i = 70;
    char dig = (char)i;

    printf("%c", dig);

    return 0;
}

这样您就可以限制文件大小。