#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <iomanip>
// generic iterator range
template<typename Iter>
std::string hex_str(Iter beg, Iter end)
{
std::stringstream ss;
ss << "[ " << std::hex << std::setfill('0');
while (beg != end)
ss << std::setw(2) << (static_cast<unsigned short>(*beg++) & 0xFF) << " ";
ss << "]" << std::dec;
return ss.str();
}
// fixed array
template<typename T, size_t N>
std::string hex_str(const T(&ar)[N])
{
return hex_str(std::begin(ar), std::end(ar));
}
// sequence container
template<template<class,class...> class S, class T, class... Args>
std::string hex_str(const S<T,Args...>& s)
{
return hex_str(s.begin(), s.end());
}
int main()
{
unsigned char ptr[] = {0xff, 0x00, 0x4d, 0xff, 0xdd};// <--see here, 0x00 is the issue.
std::cout << hex_str(ptr) << std::endl;
std::vector<unsigned char> vec{ 0x01, 0x02, 0x03, 0x04, 0x05 };
std::cout << hex_str(vec) << std::endl;
std::string str{ 0x10, 0x20, 0x30, 0x40, 0x50, 0x00 };
std::cout << hex_str(str) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvbWFuaXA+CgovLyBnZW5lcmljIGl0ZXJhdG9yIHJhbmdlCnRlbXBsYXRlPHR5cGVuYW1lIEl0ZXI+CnN0ZDo6c3RyaW5nIGhleF9zdHIoSXRlciBiZWcsIEl0ZXIgZW5kKQp7CiAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKICAgIHNzIDw8ICJbICIgPDwgc3RkOjpoZXggPDwgc3RkOjpzZXRmaWxsKCcwJyk7CiAgICB3aGlsZSAoYmVnICE9IGVuZCkKICAgICAgICBzcyA8PCBzdGQ6OnNldHcoMikgPDwgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigqYmVnKyspICYgMHhGRikgPDwgIiAiOwogICAgc3MgPDwgIl0iIDw8IHN0ZDo6ZGVjOwogICAgcmV0dXJuIHNzLnN0cigpOwp9CgovLyBmaXhlZCBhcnJheQp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgTj4Kc3RkOjpzdHJpbmcgaGV4X3N0cihjb25zdCBUKCZhcilbTl0pCnsKICAgIHJldHVybiBoZXhfc3RyKHN0ZDo6YmVnaW4oYXIpLCBzdGQ6OmVuZChhcikpOwp9CgovLyBzZXF1ZW5jZSBjb250YWluZXIKdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsY2xhc3MuLi4+IGNsYXNzIFMsIGNsYXNzIFQsIGNsYXNzLi4uIEFyZ3M+CnN0ZDo6c3RyaW5nIGhleF9zdHIoY29uc3QgUzxULEFyZ3MuLi4+JiBzKQp7CiAgICByZXR1cm4gaGV4X3N0cihzLmJlZ2luKCksIHMuZW5kKCkpOwp9CgppbnQgbWFpbigpCnsKICAgIHVuc2lnbmVkIGNoYXIgcHRyW10gPSB7MHhmZiwgMHgwMCwgMHg0ZCwgMHhmZiwgMHhkZH07Ly8gPC0tc2VlIGhlcmUsIDB4MDAgaXMgdGhlIGlzc3VlLgogICAgc3RkOjpjb3V0IDw8IGhleF9zdHIocHRyKSA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IHZlY3sgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSB9OwogICAgc3RkOjpjb3V0IDw8IGhleF9zdHIodmVjKSA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIHN0ZDo6c3RyaW5nIHN0cnsgMHgxMCwgMHgyMCwgMHgzMCwgMHg0MCwgMHg1MCwgMHgwMCB9OwogICAgc3RkOjpjb3V0IDw8IGhleF9zdHIoc3RyKSA8PCBzdGQ6OmVuZGw7CiAgICAKICAgIHJldHVybiAwOwp9Cg==