保存一个未签名的char矢量

Save an unsigned char vector one by one

本文关键字:char 矢量 一个 保存      更新时间:2023-10-16
#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;
}

如何将未签名的char矢量保存到文件?我已经尝试了几种解决方案(包括评论的解决方案),但它们都没有起作用。

*convert_line_to_instructions也返回一个无符号的char向量。

使用 output.put(i);,因为它一次带一个字符。

但是您真的想跳过for-loop,然后写一篇文字写整个矢量:

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>轻巧,缓冲,并且没有格式化。