【问题标题】:What is the correct way to convert an int array to string?将 int 数组转换为字符串的正确方法是什么?
【发布时间】:2014-03-18 18:07:09
【问题描述】:

我在想最好的方法是转换一个整数数组,例如

int array[] = {0x53,0x74,0x61,0x63,0x6B,0x4F,0x76,0x65,0x72,0x66,0x6C,0x6F,0x77,0x00}

到一个字符串,上面的整数数组相当于:

int array[] = {'S','t','a','c','k','O','v','e','r','f','l','o','w',0}

所以结果字符串是

std::string so("StackOverflow");

我正在考虑使用 foreach 循环遍历 eacht 元素并将其添加到字符串中,方法是将其强制转换为 char,但我想知道是否有更简洁/更快/更简洁的方法来做到这一点?

【问题讨论】:

  • 我想你的意思是char array[],而不是int array[]
  • @barakmanos 为什么?整数也可以存储十六进制值。
  • 哦,抱歉,没有看到“等价物”...

标签: c++ arrays string type-conversion


【解决方案1】:

如果您正在寻找一种(稍微)更快的方法,那么您可以这样做:

char str[sizeof(array)/sizeof(*array)];

for (int i=0; i<sizeof(array)/sizeof(*array); i++)
    str[i] = (char)array[i];

std::string so(str);

这将“节省您”对std::string::operator+=的重复调用...

【讨论】:

    【解决方案2】:

    int 可以隐式转换为char,您不需要任何强制转换。所有标准容器都有带有一对迭代器的构造函数,因此您可以传递数组的开头和结尾:

    std::string so( std::begin(array), std::end(array) );
    

    这可能不会比手动循环快,但我认为它符合更整洁的标准。

    也有一种简洁的方法可以对指针数组执行相同的操作。使用Boost Indirect Iterator:

    #include <boost/iterator/indirect_iterator.hpp>
    
    std::string s (
        boost::make_indirect_iterator(std::begin(array)),
        boost::make_indirect_iterator(std::end(array)) );
    

    我刚刚注意到的另一件事 - 您不需要 int 数组中的 0 来标记字符串的结尾。 std::end 将推导出数组的大小,0 实际上最终会出现在结果字符串中。

    【讨论】:

    • @Gizmo std::string so(array,array+length) 应该可以工作 - 结束迭代器是 1 过去的可用数据,在这种情况下 array+length 应该指向数组中的 0x00 值;
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多