【问题标题】:Method that converts uint8_t to string将 uint8_t 转换为字符串的方法
【发布时间】:2015-07-14 22:11:35
【问题描述】:

我有这个:

uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};

如何将其转换为 char 或其他内容以便读取其内容?这是我用来使用 AES 加密我的数据的密钥。

感谢您的帮助。 谢谢

【问题讨论】:

  • 有不止一种方法可以将一堆数字转换为字符串。您希望结果是什么样的?
  • “char 什么的”?
  • 十六进制或纯文本...最好两者兼而有之。
  • @LightnessRacesinOrbit 是的,开个玩笑很抱歉。
  • 那么是什么意思?你的目标很不明确。

标签: c++


【解决方案1】:
String converter(uint8_t *str){
    return String((char *)str);
}

【讨论】:

    【解决方案2】:

    如果我理解正确,您需要类似以下内容

    #include <iostream>
    #include <string>
    #include <numeric>
    #include <iterator>
    #include <cstdint>
    
    int main()
    {
        std::uint8_t key[] = 
        { 
            0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
        };
    
        std::string s;
        s.reserve( 100 );
    
        for ( int value : key ) s += std::to_string( value ) + ' ';
    
        std::cout << s << std::endl;
    
    }
    

    程序输出是

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 
    

    如果不需要,可以删除空格。

    有了字符串就可以随意处理了。

    【讨论】:

      【解决方案3】:
      #include <sstream>  // std::ostringstream
      #include <algorithm>    // std::copy
      #include <iterator> // std::ostream_iterator
      #include <iostream> // std::cout
      
      int main(){
          uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31};
          std::ostringstream ss;
          std::copy(key, key+sizeof(key), std::ostream_iterator<int>(ss, ","));
          std::cout << ss.str();
          return 0;
      }
      

      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 ,24,25,26,27,28,29, 30,31,

      【讨论】:

        【解决方案4】:

        您可以使用stringstream

         #include <sstream>
        
            void fnPrintArray (uint8_t key[], int length) {
        
                 stringstream list;
        
                 for (int i=0; i<length; ++i)
                {
                    list << (int)key[i];
                }
                string key_string = list.str();
                cout << key_string << endl;
            }
        

        【讨论】:

          【解决方案5】:

          如果目标是构造一个由 2 个字符的十六进制值组成的字符串,则可以将字符串流与 IO 操纵器一起使用,如下所示:

          std::string to_hex( uint8_t data[32] )
          {
            std::ostringstream oss;
            oss << std::hex << std::setfill('0');
            for( uint8_t val : data )
            {
              oss << std::setw(2) << (unsigned int)val;
            }
            return oss.str();
          }
          

          这需要标题:

          • &lt;string&gt;
          • &lt;sstream&gt;
          • &lt;iomanip&gt;

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-11
          • 1970-01-01
          • 1970-01-01
          • 2021-10-09
          • 2020-07-08
          • 2019-05-13
          • 1970-01-01
          相关资源
          最近更新 更多