gpt4 book ai didi

c++ - 使用 memcpy() 函数将字节从 unsigned char 数组放入 std::string

转载 作者:可可西里 更新时间:2023-11-01 15:07:22 26 4
gpt4 key购买 nike

我有 std::string 变量。我需要将一些字节从无符号字符数组中放入它。我知道第一个字节和长度。

我可以使用 std::string::assign 函数。我已经做到了。

但我想使用 memcpy 函数以正确的方式解决这个问题。

std::string newString;
memcpy(&newString, &bytes[startIndex], length);

我知道这是错误的。我研究并发现了一些使用 std::vector 的想法。

请帮助我为这个问题找到最优雅的解决方案。

最佳答案

因为我们只是构造字符串,所以有一个 std::string采用两个迭代器的构造函数:

template< class InputIt >
basic_string( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );

我们可以提供:

std::string newString(&bytes[startIndex], &bytes[startIndex] + length);

如果我们不构造字符串而是分配给现有字符串,您仍然应该更喜欢使用 assign()。这正是该功能的用途:

oldString.assign(&bytes[startIndex], &bytes[startIndex] + length);

但是如果出于某种原因你真的坚持使用memcpy(),那么你需要确保该字符串实际上有足够的数据可以复制到其中。然后使用 &str[0] 作为目标地址复制到其中:

oldString.resize(length); // make sure we have enough space!
memcpy(&oldString[0], &bytes[startIndex], length);

C++11 之前的版本在技术上无法保证字符串会连续存储在内存中,但在实践中无论如何都会这样做。

关于c++ - 使用 memcpy() 函数将字节从 unsigned char 数组放入 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com