Сначала я хочу отметить, что я думаю, что ответ @ Стивена очень хороший - действительно, я заметил то же самое: значения верны, но результат выглядит неловко. Это связано с тем, что используется ostream& operator<<( ostream&, unsigned char )
, поскольку используемый вами тип uint8_t
является typedef для unsigned char
(как я нашел на страницах руководства по Linux). Обратите внимание, что в VC ++ typedef не существует, и вместо этого вы должны использовать unsigned __int8
(что также приведет вас к специализации char
).
Далее вы можете проверить ваш код следующим образом (независимо от вывода):
assert( uint8_t( parseHex( "00" ) ) == uint8_t(0) );
assert( uint8_t( parseHex( "01" ) ) == uint8_t(1) );
//...
assert( uint8_t( parseHex( "ff" ) ) == uint8_t(255) );
В дополнение к ответу Стивена, я просто хочу указать на существование алгоритма transform
, который все еще может упростить ваш код.
for( int j = 0 ; j < v.size() ; j++ ){
tgt_mac[j] = parseHex(v.at(j));
}
Пишет в одну строку:
std::transform( v.begin(), v.end(), tgt_mac, &parseHex );
(И я знаю, что это не имеет отношения к вопросу ...)
(см. codepad.org о том, как он тогда выглядит)