2

Столкнулся с задачей архивирования файлов методом Хаффмана, работаю в бинарном режиме и иногда в файлах встречается символ завершающего нуля, который приводит к проблемам с использованием string.

Вопрос: можно ли как-то сделать чтобы string считал его просто символом? Если да, то как? А то очень не охота страдать с Cишными массивами char'ов

Xambey
  • 1,052
  • 3
    А std::string и считает его просто символом. http://stackoverflow.com/questions/164168/how-do-you-construct-a-stdstring-with-an-embedded-null –  Aug 11 '16 at 14:52
  • 2
    Плюсую. Я даже об этом писал: http://ru.stackoverflow.com/a/508524/181100 –  Aug 11 '16 at 14:54

1 Answers1

4

Передавайте длину массива байт в конструктор строки:

const char lit[] = "abc\0def";
std::string s(lit, sizeof(lit) - 1);
// или
std::string s(lit, lit + sizeof(lit) - 1);
// но не
// std::string s(lit);

Впрочем строка - это не самый подходящий тип для массива байт, предпочтительнее использовать std::vector<std::uint8_t> или gsl::span<std::uint8_t>.

Abyx
  • 31,143
  • ваш вариант какой-то странный, если учесть что я считываю данные из файла, но за vector<uint8_t> спасибо, думаю это отличный выбор – Xambey Aug 11 '16 at 17:20
  • 2
    @Xambey, если вы подбираете контейнер для массива работы с битами то я бы обратил внимание на std bitset, он имеет все операции для манипуляции с битами и их преобразованием (для этого он и создовался), в том числе и метод to_string для преобразования его в строку. – perfect Aug 11 '16 at 17:39
  • еще раз спасибо, вопрос закрыт – Xambey Aug 11 '16 at 17:46