如果这是有效的:
unsigned char buffer[] = {
0x01, 0x02, 0x03, 0x04
};
这是否也适用于std :: string,例如
std::string buffer = {
0x01, 0x02, 0x03, 0x04
};
如果没有,我该如何插入这些值?
答案 0 :(得分:9)
不在C ++ 03中,但您可以在C ++ 011中执行此操作:
std::string buffer = { 0x01, 0x02, 0x03, 0x04 }; //C++011 ONLY
演示:http://www.ideone.com/1cOuX。在演示中,我使用了可打印的字符('A'
,'B'
等),仅仅是为了演示。
在C ++ 03中,由于@andrewdski给出的解决方案无疑是丑陋,你可以这样做:
unsigned char values[] = {0x01, 0x02, 0x03, 0x04 };
std::string buffer(values, values + sizeof(values));
这是一种更清洁的方法。如果您希望稍后添加更多值,那么您可以这样做:
unsigned char more_values[] = {0x05, 0x06, 0x07, 0x08 };
buffer.insert(buffer.end(), more_values, more_values+ sizeof(more_values));
如果您想添加其他std::string
的值,那么您可以这样做:
//add values from s to buffer
buffer.insert(buffer.end(), s.begin(), s.end());
与:
相同buffer += s; //cool
顺便说一下,你可以编写一个名为join
的小工具,除了其他有趣的东西之外,还可以做到这一点:
std::string s = join() + 'A' + 'B' + 'C' + 'D';
您甚至可以在一个join
语句中混合使用不同类型:
std::string s = join() + 'A' + 'B' + 'C' + 'D' + "haha" + 9879078;
即使在C ++ 011中,使用{}
方法也是不可能的。
该实用程序及其完整演示如下所示:
#include <iostream>
#include <string>
#include <sstream>
struct join
{
std::stringstream ss;
template<typename T>
join & operator+(const T &data)
{
ss << data;
return *this;
}
operator std::string() { return ss.str(); }
};
int main() {
std::string s1 = join() + 'A' + 'B' + 'C' + 'D';
std::cout << s1 << std::endl;
std::string s2 = join() + 'A' + 'B' + 'C' + 'D' + "haha" + 9879078;
std::cout << s2 << std::endl;
}
输出:
ABCD
ABCDhaha9879078
在线演示:http://www.ideone.com/3Y7pB
但是,此实用程序需要使用要插入字符串的特定值进行强制转换:
std::string buffer=join()+ (char)0x01 +(char)0x02 + (char)0x03 + (char)0x04;
不可否认,没有那么酷。需要强制转换,否则每个值都将被视为您不想要的int
类型。所以我会主张前面提到的清洁方法。但是这个实用程序可以在其他情况下帮助您。有时可以尝试使用C ++运算符和功能。 :d
答案 1 :(得分:7)
std::string buffer = "\x01\x02\x03\x04"
有点难看,但它有效。