我在想什么是转换整数数组的最佳方法,例如
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
,但我想知道是否有更干净/更快/更简洁的方法来执行此操作?
答案 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+=
...