использование стандарных алгоритмов
От: BOPOH_N Россия  
Дата: 28.07.05 12:09
Оценка:
Тут возник спор о "искусстве раде искусства"
Вот две ф-ии для форматирования бинарных данных:


template<typename OStream, size_t LineLen>
size_t FormatByteLine(OStream& out, size_t count, unsigned char data)
{
    if(!(count++%LineLen)) out << "\n\t";
    out << std::hex << std::setw(2) << std::setfill('0') << (int)data << ' ';    
    return count;
}

std::string FormatData(unsigned char* begin,unsigned short    len)
{
    std::stringstream str;
    str << std::hex ;    

    size_t count=0;
    unsigned char* end=begin+len;
    for(unsigned char* it=begin; it!=end; ++it)
        count=FormatByteLine<std::stringstream, 12>(str, count, *it);

    return str.str();
}


А теперь таже ф-я FormatData только в модной обертке:

std::string FormatData(unsigned char* begin,unsigned short    len)
{
    std::stringstream str;
    str << std::hex ;    

    std::accumulate( begin, begin+len, 0,
        boost::bind(FormatByteLine<std::stringstream, 12>, boost::ref(str), 
                boost::arg<1>(), boost::arg<2>()));

    return str.str();
}


А теперь вопрос: Стоила овчинка выделки?
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.