我想解决的问题:
读取二进制文件并将内容写入文本文件。二进制文件中的内容格式由用户使用选项指定,例如, bin2txt.exe [filename] [/f]
,其中/f
表示二进制文件中的内容属于float类型。
我目前的算法:
声明:
typedef int datatype;
使用if...else
或switch...case
将数据类型修改为主代码中的float,unsigned int short等。
问题:
数据类型在if...else
内成功修改,但在if...else/switch...case
之外切换回默认值(此处为int)。这意味着,我可以将二进制读取到向量,然后将向量写入if...else
语句中的文本文件。但是这样,代码变得过于重复(每个if块都有一个向量声明,初始化,读入向量和写入文本文件。)。避免这种重复会更好。
有人可以指导我写作方向。 ?感谢。
答案 0 :(得分:2)
如果您发现自己编写的代码除了涉及的类型外,它通常是模板的理想选择。
一个简单的(未经测试的)变体,没有错误检查或输入验证:
template<typename T>
void convert(std::istream& in, std::ostream& out)
{
T data;
while (in.get(reinterpret_cast<char*>(&data), sizeof(data)))
{
out << data << std::endl;
}
}
int main(int argc, char* argv[])
{
std::ifstream input(argv[1], std::ios::binary);
std::ostream& output = std::cout;
std::string format = argv[2];
if (format == "/f")
{
convert<float>(input, output);
}
else
{
convert<int>(input, output);
}
}