>length = boost::lexical_cast<int>(value);
>...
>vector<char> deflateBody(str.begin(), str.begin() + length);
>str.erase(0, length);

lengthが負数になれる必要はねえな。