代码之家  ›  专栏  ›  技术社区  ›  mans

从std::数组创建十六进制表示

  •  1
  • mans  · 技术社区  · 8 年前

    我有一个 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循环来完成这项工作,但是否有更整洁的方法来完成这项工作?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Maddy    8 年前

    你可以像下面这样做

    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();
    } 
    
        2
  •  1
  •   YSC    8 年前

    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