使用字符串作为缓冲区容器
Using string as buffer container
我正在使用的库 提供消息 从网络接收uint8_t
数组,我可以使用std::string
作为这些缓冲区的容器吗?
uint8_t *buffer = ...;
size_t length = ...;
std::string msg = std::string(buffer, length);
此构造函数导致编译错误?如果我使用reinterpret_cast
将缓冲区转换为char*
,它会编译,但它是否定义良好且操作合法?
您可以安全地转换为char*
,因为标准规定char*
可以别名任何其他类型。
// this would be fine
std::string msg(reinterpret_cast<char*>(buffer), length);
顺便说一句,如果您使用std::string
的范围构造函数(数字 6),您可以避免reinterpret_cast
和对混叠的任何疑虑:
std::string msg(buffer, buffer + length);
现在初始化完全取决于将unsigned char
的(因为让我们面对现实吧,uint8_t
可能就是这样)转换为char
。转换结果是实现定义的,但应该不足为奇。
另一方面,还应该考虑std::string
这里是否是正确的抽象。是否打算将缓冲区视为字符串类型?对于没有任何字符串包袱的原始字节序列,也许std::vector<std::uint8_t>
或std::vector<std::byte>
更容易使用。
相关文章:
- 如何使用字符串find_first_of缓冲区形式(size_t n 参数)
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- 清除输入缓冲区后未提取字符串流
- 协议缓冲区字符串字段的文本编码
- 如何避免将数据缓冲区的额外副本复制到字符串?
- 在 node.js 中将缓冲区从 C++ 转换为 UTF-8 字符串
- 将指针作为缓冲区传递到第一个字符串元素
- 为什么在调用C#DLL时不需要提供字符串缓冲区
- 如何在C++中对静态缓冲区执行字符串格式化?
- 自动截断和 null 终止缓冲区溢出中的字符串缓冲区
- 在协议缓冲区 c++ 中反序列化字符串数组
- 套接字缓冲区到字符串
- 如果用户输入两个或多个由空格分隔的字符串C++如何防止缓冲区溢出?
- 二进制字符数组转换为字符串流并从缓冲区弹出
- 为什么错误 C6386 缓冲区溢出与 strsafe.h 字符串 Cch 函数
- 将字符缓冲区转换为字符串
- std::字符串与字节缓冲区(C++的差异)
- strcpy_s将超过字符串长度的字符串复制到目标缓冲区(用 0xFE 填充)
- std::字符串流,直接输出缓冲区/字符串结果访问,避免复制
- visual 在指向缓冲区(字符串 " ")的空指针上使用 sizeof() C++ 以获得以字节为单位的大小?