C++ 将 Vector<BYTE> 转换为第一个 vector 字节为 0 的字符串

标签 c++ string vector byte zero

我正在尝试将 BYTES(或无符号字符)的 std::vector 转换为 std::string。 我遇到的问题是当 vector 的第一个元素是 0 时,转换后返回一个空字符串。

下面两种方法我都试过了。 string1 和 string2 都返回一个空字符串。 我期望的结果是一个以 2 x 0 开头后跟几个其他字符的字符串。

// vector of BYTE, contains these 7 elements for example: (0,30,85,160,155,93,0)
std::vector<BYTE> data;

// method 1
BYTE* pByteArray = &data[0];
std::string string1 = reinterpret_cast<LPCSTR>(pByteArray);

// method 2
std::string string2(data.begin(),data.end());

// both string1 and string2 return ""

我猜是因为 vector 中的第一个 BYTE 是 0,所以字符串赋值认为它为 null 或空。 为了返回字符串的其余部分,我可以做一些其他转换吗?

非常感谢任何帮助。

最佳答案

第二个不是真的空请考虑:

// vector of BYTE, contains these 7 elements for example: (0,30,85,160,155,93,0)
std::vector<BYTE> data = {0, 35, 35 ,38};

// method 2
std::string string2(data.begin(),data.end());
cout<< (string2.data()+1) << " size:"<< string2.size() << endl;
/* Notice that size is 4 */

关于 ideone

编辑 检查大小更加简单,因为它是 4


datanull 终止视为docs请解释(强调我的):

The returned array is null-terminated, that is, data() and c_str() perform the same function. If empty() returns true, the pointer points to a single null character. (since C++11)

一种“c++98 安全”的方式可能看起来像like :

cout.write(string2.data()+1, string2.size()-1); 

无论如何打印只是为了证明字符串“非空”:)

关于C++ 将 Vector<BYTE> 转换为第一个 vector 字节为 0 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015126/

相关文章:

c++ - 如何存储多态闭包?

c++ - 指向基类的指针以及如何确定实例的实际类型

c++ - 删除指向指针列表的指针

mysql - 将文本插入到恰好包含 MySQL 中的 sql 的 varchar 中?

c++ - 在 main() 之外初始化 std::vector 会导致性能下降(多线程)

c++ - 为什么重载!运营商需要一个常量返回

java - 如何将 "\n"添加到字符串的最后一个单词?

c# - 仅替换字符串中出现的单个 "\n"

unity-game-engine - 绕全局 Y 轴旋转对象,忽略其局部旋转

c++ - 使用静态 vector 作为存储