diff options
Diffstat (limited to 'libqpdf/QUtil.cc')
-rw-r--r-- | libqpdf/QUtil.cc | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc index 5c92613a..f186389d 100644 --- a/libqpdf/QUtil.cc +++ b/libqpdf/QUtil.cc @@ -24,11 +24,23 @@ std::string QUtil::int_to_string(long long num, int length) { - // Backward compatibility -- this function used to use sprintf - // with %0*d, so we interpret length such that a negative value - // appends spaces and a positive value prepends zeroes. + return int_to_string_base(num, 10, length); +} + +std::string +QUtil::int_to_string_base(long long num, int base, int length) +{ + // Backward compatibility -- int_to_string, which calls this + // function, used to use sprintf with %0*d, so we interpret length + // such that a negative value appends spaces and a positive value + // prepends zeroes. + if (! ((base == 8) || (base == 10) || (base == 16))) + { + throw std::logic_error( + "int_to_string_base called with unsupported base"); + } std::ostringstream buf; - buf << num; + buf << std::setbase(base) << std::nouppercase << num; std::string result; if ((length > 0) && (buf.str().length() < static_cast<size_t>(length))) @@ -152,16 +164,13 @@ QUtil::copy_string(std::string const& str) std::string QUtil::hex_encode(std::string const& input) { - size_t input_size = input.length(); - size_t hex_size = 1 + (2 * input_size); - PointerHolder<char> bufp(true, new char[hex_size]); - char* buf = bufp.getPointer(); - buf[hex_size - 1] = '\0'; - for (unsigned int i = 0; i < input_size; ++i) + std::string result; + for (unsigned int i = 0; i < input.length(); ++i) { - sprintf(buf + i * 2, "%02x", static_cast<unsigned char>(input[i])); // XXXX + result += QUtil::int_to_string_base( + static_cast<int>(static_cast<unsigned char>(input[i])), 16, 2); } - return buf; + return result; } void |