Я хочу представить свой файл в виде строки, но у меня есть проблема, файл содержит 0x00, и моя строка заканчивается прямо там. Как решить это?Представьте файл с 0x00 как строку
ответ
Если вы не можете использовать нуль в качестве символа завершения у вас очень мало вариантов:
а) записать размер строки до начала строки: 005Hello 011Hello \ 0World
б) использовать строки фиксированной длины
c) префикс не заканчивающихся нулей со специальным символом, подобным '\'. Если в вашей строке появляется '\', напишите дважды «\». Обрати логику при чтении их обратно.
Поскольку вопрос отмечен C++, я думаю, что этот ответ вводит в заблуждение. Есть больше (и лучше) вариантов представления строк в C++, чем перечисленные здесь. –
У меня есть текстовый файл, как это в двоичном 0x61 0x61 0x61 0x00 0x62 0x62 0x62
"текстовый файл" в двоичной системе? - Я не знаю, что это значит.
Но если у вас есть значения, разделенные пробелами вы можете попробовать использовать 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<<" ";
Не забудьте прочитать файл в двоичном режиме:
#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';
}
Лучший способ помочь вам - показать вам вашу неудачную попытку. – chris
Что такое "строка"? Нам нужно увидеть соответствующий код. –
У меня есть txt-файл, как это в двоичном формате 0x61 0x61 0x61 0x00 0x62 0x62 0x62. Когда я читаю двоичный файл и сохраняю его в строке, я получаю только этот 0x61 0x61 0x61. – user2357536