一个一个地保存一个unsigned char vector
Save an unsigned char vector one by one
#include "stdafx.h"
#include "Compiler.h"
#include <fstream>
int main() {
std::ofstream output("file.bin", std::ios::binary | std::ios::trunc);
if(output.fail()) {
return 1;
}
std::vector<unsigned char> f = Runtime::convert_line_to_instructions("rt_reg str Hello");
for(unsigned char i : f) {
//output.write(reinterpret_cast<char*>&i, sizeof(unsigned short)); doesn't work here.
}
std::cerr << "Program Compiled!" << std::endl;
while(true);
return 0;
}
如何将无符号字符向量保存到文件中?我已经尝试了几种解决方案(包括被注释掉的那个),但其中 none 有效。
*convert_line_to_instructions returns 也是一个无符号字符向量。
使用 output.put(i);
因为它一次需要一个字符。
但您真的想跳过 for 循环,一次写入整个向量:
output.write(f.data(), f.size());
它是一个 fstream,因此您可以使用 iostream 运算符,例如 <<
。
#include <fstream>
#include <iostream>
#include <vector>
int main(const int argc, const char* argv[]) {
std::ofstream output{"file.bin", std::ios::binary | std::ios::trunc};
if (output.fail())
return 1;
std::vector<unsigned char> input = {'r', 't', '_', 'r', 'e', 'g', ' ',
's', 't', 'r', ' ', 'H', 'e', 'l',
'l', 'o'};
for (const auto i : input)
output << i;
return 0;
}
一种更简洁的方法是使用带有迭代器的 STL 算法:
std::copy(begin(input), end(input), std::ostreambuf_iterator<char>(output));
ostreambuf_iterator<char>
是轻量级的,缓冲的,不执行格式化。
#include "stdafx.h"
#include "Compiler.h"
#include <fstream>
int main() {
std::ofstream output("file.bin", std::ios::binary | std::ios::trunc);
if(output.fail()) {
return 1;
}
std::vector<unsigned char> f = Runtime::convert_line_to_instructions("rt_reg str Hello");
for(unsigned char i : f) {
//output.write(reinterpret_cast<char*>&i, sizeof(unsigned short)); doesn't work here.
}
std::cerr << "Program Compiled!" << std::endl;
while(true);
return 0;
}
如何将无符号字符向量保存到文件中?我已经尝试了几种解决方案(包括被注释掉的那个),但其中 none 有效。
*convert_line_to_instructions returns 也是一个无符号字符向量。
使用 output.put(i);
因为它一次需要一个字符。
但您真的想跳过 for 循环,一次写入整个向量:
output.write(f.data(), f.size());
它是一个 fstream,因此您可以使用 iostream 运算符,例如 <<
。
#include <fstream>
#include <iostream>
#include <vector>
int main(const int argc, const char* argv[]) {
std::ofstream output{"file.bin", std::ios::binary | std::ios::trunc};
if (output.fail())
return 1;
std::vector<unsigned char> input = {'r', 't', '_', 'r', 'e', 'g', ' ',
's', 't', 'r', ' ', 'H', 'e', 'l',
'l', 'o'};
for (const auto i : input)
output << i;
return 0;
}
一种更简洁的方法是使用带有迭代器的 STL 算法:
std::copy(begin(input), end(input), std::ostreambuf_iterator<char>(output));
ostreambuf_iterator<char>
是轻量级的,缓冲的,不执行格式化。