我想将我的文件表示为一个字符串,但我有一个问题,该文件包含一个0x00,我的字符串在那里被终止。如何解决这个问题?
答案 0 :(得分:1)
如果您不能使用null作为终止字符,则几乎没有选项:
a)在字符串之前写入字符串大小: 005Hello 011Hello \ 0World
b)使用固定长度的字符串
c)使用类似'\'的特殊字符前缀非终止空值。如果字符串中出现“\”,请将其写入“\”两次。阅读时反转逻辑。
答案 1 :(得分:1)
我在二进制文件0x61中有一个这样的txt文件0x61 0x61 0x00 0x62 0x62 0x62
二进制文件中的“txt文件”? - 我不知道它是什么意思。但是,如果您使用空格分隔值,则可以尝试使用std::vector
std::string
(不使用空终止)
std::ifstream fin("input.txt");
std::vector<std::string> v;
std::copy(std::istream_iterator<std::string> (fin),
std::istream_iterator<std::string> (),
std::back_inserter(v) );
std::vector<std::string>::iterator it =v.begin();
for(;it!=v.end();++it)
std::cout<< *it<<" ";
答案 2 :(得分:0)
请务必以二进制模式读取文件:
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
std::string read_file_as_string(const char* filename) {
std::ifstream input(filename, std::ios::binary);
if (!input) {
std::perror("Great failure");
std::exit(1);
}
std::stringstream contents;
contents << input.rdbuf();
return contents.str();
}
int main() {
std::string s = read_file_as_string("Derp.exe");
std::cout << "s.size() = " << s.size() << '\n';
for(unsigned char c : s) {
std::cout << std::hex << static_cast<unsigned int>(c) << ' ';
}
std::cout << '\n';
}