2013-08-17 2 views
-3

Я хочу представить свой файл в виде строки, но у меня есть проблема, файл содержит 0x00, и моя строка заканчивается прямо там. Как решить это?Представьте файл с 0x00 как строку

+3

Лучший способ помочь вам - показать вам вашу неудачную попытку. – chris

+0

Что такое "строка"? Нам нужно увидеть соответствующий код. –

+0

У меня есть txt-файл, как это в двоичном формате 0x61 0x61 0x61 0x00 0x62 0x62 0x62. Когда я читаю двоичный файл и сохраняю его в строке, я получаю только этот 0x61 0x61 0x61. – user2357536

ответ

1

Если вы не можете использовать нуль в качестве символа завершения у вас очень мало вариантов:

а) записать размер строки до начала строки: 005Hello 011Hello \ 0World

б) использовать строки фиксированной длины

c) префикс не заканчивающихся нулей со специальным символом, подобным '\'. Если в вашей строке появляется '\', напишите дважды «\». Обрати логику при чтении их обратно.

+0

Поскольку вопрос отмечен C++, я думаю, что этот ответ вводит в заблуждение. Есть больше (и лучше) вариантов представления строк в C++, чем перечисленные здесь. –

1

У меня есть текстовый файл, как это в двоичном 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<<" "; 
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'; 
}