使用大括号/括号将值分配给标准::字符串
Assign value using curly braces/bracket to std::string
如果这是有效的:
unsigned char buffer[] = {
0x01, 0x02, 0x03, 0x04
};
这是否也适用于 std::string,例如
std::string buffer = {
0x01, 0x02, 0x03, 0x04
};
如果没有,如何插入此类值?
不在 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
std::string buffer = "x01x02x03x04"
有点丑,但它有效。
相关文章:
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何初始化一个标准::字符串数组?
- 在命名管道中发送标准::字符串流
- 标准::字符串与空字符可能吗?
- 如何从标准::string_view正确创建标准::字符串?
- 从常量字符*、字符*参数到标准::字符串的直接转换接口
- 热将标准::__cxx11::字符串转换为标准::字符串
- 如何将字符*浅复制到标准::字符串?
- 十进制到八进制递归C++.以标准::字符串格式输出
- 如何通过标准字符串打印 ostream 变量的值?
- 如何使用 RPM 从内存中读取标准::字符串
- 我需要初始化标准::字符串吗?
- 标准地图如何知道使用标准字符串的数据作为键
- C++ - 从标准::字符串解析数字
- 如何调整标准::字符串的大小以删除所有空终止符字符?
- URL 编码扩展的 ASCII 标准::字符串在 C++.
- 将字符串::迭代器转换为标准::字符串
- 如何将标准::字符串内容克隆到新的 char[] 数组
- 如何将标准::字符串拆分为标准::string_views的范围 (v3)
- 标准::字符串中的内存泄漏