如何将std::string转换为std::vector<uint8_t>?

24

在谷歌游戏服务上保存游戏所需的数据格式是:std::vector<uint8_t>,如“数据格式”下所述: https://developers.google.com/games/services/cpp/savedgames

我认为这个向量表示一种字节数组。这正确吗?那么如何将std::string转换为std::vector<uint8_t>


1
如果你想逐个字符处理,你可以循环并将元素转换/添加到向量中... - qxz
2个回答

44

std::vector 有一个专门用于此目的的构造函数:

std::string str;
std::vector<uint8_t> vec(str.begin(), str.end());

2
@pSoLT:终止零是C风格字符串约定的一部分,而不是C++字符串的一部分,通常std::vector<uint8_t>不应被视为字符串。 - stefaanv
3
@StoryTeller: 我不同意(请参见先前的评论) - stefaanv
2
不是的,我只是在 coliru 上进行了测试。 - stefaanv
3
不,std::string的存储空间末尾有一个额外的空字节,但它不是字符串本身的一部分。 - T.C.
2
@T.C. - 是的,我纠正了。 data() 函数的参考资料 证实了这一点。 - StoryTeller - Unslander Monica
显示剩余11条评论

11

除了DeiDei的回答之外,如果向量已经构建好了,您可以执行以下操作:

std::string str;
std::vector<uint8_t> vec;
...
vec.assign(str.begin(), str.end());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接