【问题标题】:Converting int[] to String in C++在 C++ 中将 int[] 转换为字符串
【发布时间】:2011-03-07 17:37:00
【问题描述】:

我有一个字符串定义为std::string header = "00110033"; 现在我需要字符串来保存数字的字节值,就好像它是这样构造的

char data_bytes[] = { 0, 0, 1, 1, 0, 0, 3, 3};
std::string header = new std::string(data_bytes, 8).c_str());

我使用atoi 将初始字符串转换为int 数组。现在我不确定如何用它制作字符串。让我知道是否有更好的方法。

【问题讨论】:

  • 我无法理解你的问题。
  • 第二行的语法不正确。还有,这里new的用意是什么?
  • 为什么需要这样做?如果数组包含的值不在 0 到 9 之间,你会怎么做?
  • 效率低下(由于复制)和内存泄漏(由于new 没有存储相应delete 的指针)说std::string header = (new std::string(data_bytes, 8))->c_str();(或任何你的意思)。你可以直接说std::string header(data_bytes, 8);

标签: c++ arrays string std


【解决方案1】:

你可以写一个小函数

string int_array_to_string(int int_array[], int size_of_array) {
  string returnstring = "";
  for (int temp = 0; temp < size_of_array; temp++)
    returnstring += itoa(int_array[temp]);
  return returnstring;
}

未经测试!

稍微不同的方法

string int_array_to_string(int int_array[], int size_of_array) {
  ostringstream oss("");
  for (int temp = 0; temp < size_of_array; temp++)
    oss << int_array[temp];
  return oss.str();
}

【讨论】:

  • @ultifinitus atoi 将字符串转换为 int,而您需要将 int 转换为字符串。您需要使用 itoa,这不是标准功能,因此最好的解决方案可能是通过添加“0”将 int 转换为字符(请参阅我的解决方案)。你也可以使用词法转换:boost::lexical_cast&lt;std::string&gt;(int_array[temp]);
  • 改用std::stringstream,这样更安全。
  • 哦,天哪,我会修改它,这是一个 5 秒的功能,天哪! =)
【解决方案2】:

这样做:

  char data_bytes[] = { '0', '0', '1', '1', '0', '0', '3', '3', '\0'};
  std::string header(data_bytes, 8);

或者,也许,你想这样做:

  std::stringstream s;
  s << data_bytes;
  std::string header = s.str();

ideone 演示:http://ideone.com/RzrYY


编辑:

data_bytes 中的最后一个\0 是必需的。也可以在这里看到这个有趣的输出:http://ideone.com/aYtlL

PS:我以前不知道这一点,感谢Ashot,我通过实验才知道这种差异!

【讨论】:

  • 不能将整数存储在 char 数组中
  • @Nawaz -1 data_bytes 不以 '\0' 结尾,因此您无法打印它。 + 在这两种情况下,您的字符串都不等于 string("00110033");
  • 你不会得到你期望的结果
  • @Ashot:我看到了,也修复了它。 @Nicklamor:问题已解决。但是,这与“将整数存储在字符中”无关。
  • @Nawaz 删除 data_bytes 中的最后一个 '\0'。您的字符串现在以双 '\0' 结尾 :) 请参阅此主题 stackoverflow.com/questions/4711449/…
【解决方案3】:
 char data_bytes[] = { 0, 0, 1, 1, 0, 0, 3, 3};
  std::string str;
 for(int i =0;i<sizeof(data_bytes);++i)
      str.push_back('0'+data_bytes[i]);

【讨论】:

    【解决方案4】:

    假设您使用的是“相当正常”的系统,其中 '0''9' 的数值是连续的,您只需遍历每个元素并减去 '0'

    for(int i = 0; i < header.size(); ++i)
    {
        header[i] -= '0';
    }
    

    【讨论】:

    • 你不应该加而不是减吗?
    • @Eugen Constantin Dinca OP 有一个类似“00111”的字符串,并希望将其转换为具有这些实际字节值的字符串,例如“00111”->“\000\000\001\ 001\001”。这样你就减去了。
    【解决方案5】:

    你可以这样做:

    std::string header( data_bytes, data_bytes + sizeof( data_bytes ) );
    std::transform( header.begin(), header.end(), header.begin(), 
         std::bind1st( std::plus< char >(), '0' ) );
    

    【讨论】:

      【解决方案6】:

      如果integ[]是整数数组,s是我们希望得到的最后一个字符串,

      string s="";
      
      for(auto i=0;i<integ.size()-1; ++i)
          s += to_string(ans[i]); 
      
      cout<<s<<endl;
      

      【讨论】:

        猜你喜欢
        • 2011-07-11
        • 2013-05-23
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多