如何将二进制文件的十六进制表示保存到std :: string中?

时间:2016-01-04 15:54:24

标签: c++ string hex fstream stringstream

我已使用此解决方案(c++) Read .dat file as hex using ifstream但不是将其打印到std::cout我想将二进制文件的十六进制表示保存到std::string

#include <fstream>
#include <sstream>
#include <iostream>
#include <string>
#include <iomanip>

int main(int argc, char** argv)
{
  unsigned char x; 

  std::ifstream fin(argv[1], std::ios::binary);
  std::stringstream buffer;

  fin >> std::noskipws;
  while (!fin.eof()) {
    fin >> x ; 
    buffer << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(x);
  }
  std::cout << buffer;
}

打印到cout有效,但将这些内容保存到buffer,然后尝试将其打印到cout打印垃圾。

我错过了什么?

1 个答案:

答案 0 :(得分:4)

你没有std::string;你有一个std::stringstream。并且您不能“打印”字符串流,但您可以使用std::string成员函数获取其缓冲区的str()表示。

你可能意味着:

std::cout << buffer.str();

有更简洁的方法可以做到这一点,但上面的内容将帮助你开始。

顺便说一下,你的循环是错误的。你过早检查EOF。