将int数组转换为字符串的正确方法是什么?

时间:2014-02-18 19:06:57

标签: c++ arrays string type-conversion

我在想什么是转换整数数组的最佳方法,例如

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,但我想知道是否有更干净/更快/更简洁的方法来执行此操作?

2 个答案:

答案 0 :(得分:4)

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将最终在结果字符串中结束。

答案 1 :(得分:0)

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

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+= ...