Здравствуйте, uzhas, Вы писали:
U>Здравствуйте, uzhas, Вы писали:
U>>набил я ваш код и вот что получил:
U>>исходный код:
U>>http://codepad.org/H4vIjlLP
U>>подфикшенный код:
U>>http://codepad.org/5nURjSpj
U>>можете обратить внимание на комментарий, ибо там забытая логика
U>>успехов
U>от делать нечего написал свою версию фильтрационной функции
U>http://codepad.org/BeOtcWS2
U>возможно, вам что-то пригодится
U>успехов)
спасибо за шаблон

после небольшой доработки функция приняла вид:
#define DT_EXCLUDE_FILLER 0
#define DT_INCLUDE_FILLER 1
inline void vector_to_string(Common::ArrayOfUInt8 const& in, Common::String& out, Common::Bool includeFiller = DT_INCLUDE_FILLER)
{
out.clear();
for (Common::ArrayOfUInt8::const_iterator i = in.begin(); i != in.end(); ++i)
{
if (*i < (15 + includeFiller))
{
out.push_back(((*i) < 10 ? (*i) + 48 : (*i) + 55));
}
}
}
inline void string_to_vector(Common::String const& in, Common::ArrayOfUInt8& out, Common::Bool includeFiller = DT_INCLUDE_FILLER)
{
out.clear();
for(Common::String::const_iterator iter = in.begin(); iter != in.end(); ++iter)
{
//0-9
if((*iter > 0x02F) && (*iter < 0x03A))
{
out.push_back(*iter - 0x030);
}
//A-E + fillerFlag
else if((*iter > 0x040) && (*iter < (0x046 + includeFiller)))
{
out.push_back(*iter - 55);
}
//a-e + fillerFlag
else if((*iter > 0x060) && (*iter < (0x066 + includeFiller)))
{
out.push_back(*iter - 87);
}
}
}
вопрос со странностью поведения & так и остался :/