我以 . 形式接收数据vector<char>
,我需要从中创建string
. 向量可能包含 utf-16 字符(即空字节)并且是固定大小的。实际数据用空字节填充到这个固定大小。因此,例如,我可以有以下向量:
\0 a \0 b \0 c \0 d \0 \0 \0 \0
固定大小为 12,向量包含 utf-16 字符串“abcd”,用 4 个空字符填充以调整大小。
从这里,我需要实际提取这个字符串。我已经有了从 utf-16 转换为 的代码,string
让我感到困惑的是在没有填充的向量中找到字符(字节)的数量。在上面的示例中,数字是 8。
我开始做类似的事情:
std::string CrmxFile::StringFromBytes(std::vector<char> data, int fixedsize) {
std::vector<char>iterator it = data.rbegin();
while(it != data.rend() && *it == '\0') {
it++;
}
return std::string(&data[0], fixedsize - (it - data.rbegin());
}
然而,在完整的上下文中,向量包含大量数据,我只需要对它的指定部分进行上述操作。例如,向量可能包含 1000 个元素,我需要获取从位置 30 开始并且最多包含 12 个字符的字符串。当然,我可以在应用上述逻辑之前创建另一个向量并将所需的 21 个字符复制到其中,但我觉得我应该可以直接在给定的向量上做一些事情。然而,我无法掌握我正在与什么进行比较的迭代器。任何帮助表示赞赏。