首页 > 解决方案 > 从 std::array 创建一个十六进制代表

问题描述

我有一个std::array,我想通过将每个字节转换为其相等的十六进制值来创建一个字符串,如下所示:

 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 循环来完成这项工作,但是如果有更简洁的方法可以做到这一点?

标签: c++c++11

解决方案


如果您想玩得开心,可以使用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/a/9bc542742b1566e2


推荐阅读