我有640 * 480个号码。我需要将它们写入文件。我稍后需要阅读它们。什么是最好的解决方案?数字在0到255之间。
对我来说,最好的解决方案是将它们写成二进制(8位)。我把数字写入txt文件,现在它看起来像1011111010111110 .....所以没有问题数字的开始和结束。
我该如何从文件中读取它们?
使用c ++
答案 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;
}
这样您就可以限制文件大小。