C++ 将字节数组附加到字符串c++;有效地
我正在处理几个字节数组块(C++ 将字节数组附加到字符串c++;有效地,c++,arrays,memory,C++,Arrays,Memory,我正在处理几个字节数组块(uint_8),并将它们附加到一个字符串(my_string)。为了提高效率,我已经为我的字符串保留了足够多的字节 my_string.reserve(more_than_enough_bytes); 我正在尝试附加每个块,如以下函数所示: bool MyClass::AppendToMyString(uint_8* chunk, size_t chunk_num_bytes) { memcpy(const_cast<uint_8*>(my_strin
uint_8
),并将它们附加到一个字符串(my_string
)。为了提高效率,我已经为我的字符串保留了足够多的字节
my_string.reserve(more_than_enough_bytes);
我正在尝试附加每个块,如以下函数所示:
bool MyClass::AppendToMyString(uint_8* chunk, size_t chunk_num_bytes) {
memcpy(const_cast<uint_8*>(my_string.data()), chunk, chunk_num_bytes);
return true;
}
bool MyClass::AppendToMyString(uint\u 8*块,size\u t chunk\u num\u字节){
memcpy(const_cast(my_string.data())、chunk、chunk_num_字节);
返回true;
}
但问题是
memcpy
不会更新myu字符串的大小。所以,下次调用这个函数时,我不知道最后一个元素在哪里,只使用一个单独的变量。有什么想法吗?std::string
有一个方法可以解决这个问题。大致如下:
void append_chunk (std::string &s, const uint8_t* chunk, size_t chunk_num_bytes)
{
s.append ((char *) chunk, chunk_num_bytes);
}
您应该使用my_string.append方法,这就是它的设计目的<代码>我的字符串.append(chunk,chunk\u num\u字节)
您可能需要从uint\u 8*
转换到char*
我很惊讶memcpy(我的字符串,chunk,chunk\u num\u字节)代码>编译。什么类型是我的字符串?我一直假设std::string。该页面中的重载4应该为您优化为memcpy
。string'
ssize
和length
方法保证有效。这意味着在调用size
时,string
无法运行并计算第一个空值之前的字符数。它需要能够在修改字符串时设置大小。由于memcpy
不知道它对字符串的操作,它只看到它应该写入的地址,因此无法更新字符串的大小。