Создание шестнадцатеричного представителя из массива std :: - PullRequest
0 голосов
/ 23 мая 2018

У меня есть std::array, и я хочу создать из него строку путем преобразования каждого байта в его равное значение HEX примерно так:

 string getString(array<unsigned char, 10> data)
 {
     // what is the faster way to do this?
 } 

main()
{
    array<unsigned char, 10> data={0,1,2,3,4,5,6,7,8,9};

   string result=getString(data);
   out<<result<<endl;
}

, и он должен напечатать что-то вроде:

0x00 0x01 0x02 0x03

или даже

00010203040506070809

любым способом, который быстрее.

Я знаю, что могу использовать цикл for и выполнять эту работу, но еслиЕсть ли более аккуратный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Если вы хотите немного повеселиться, вы можете использовать std::ostream_iterator:

template<class Container>
std::string hex(Container const& c)
{
    std::stringstream out;
    std::copy(begin(c), end(c), std::ostream_iterator<unsigned int>(out << std::hex, " "));
    return out.str();
}

Использование

std::cout << hex(array) << "\n";

Демо

http://coliru.stacked -crooked.com / а / 9bc542742b1566e2

0 голосов
/ 23 мая 2018

вы можете сделать что-то вроде ниже

string getString(array<unsigned char, 10> data)
{
   std::stringstream ss;
   ss << std::hex << std::setfill('0');
   for(int i=0; i<data.size(); ++i)
      ss << std::setw(2) << (int)data[i];
   return ss.str();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...