我已使用此解决方案(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
打印垃圾。
我错过了什么?
答案 0 :(得分:4)
你没有std::string
;你有一个std::stringstream
。并且您不能“打印”字符串流,但您可以使用std::string
成员函数获取其缓冲区的str()
表示。
你可能意味着:
std::cout << buffer.str();
有更简洁的方法可以做到这一点,但上面的内容将帮助你开始。
顺便说一下,你的循环是错误的。你过早检查EOF。