C++ - 分配一个无符号字符缓冲区,然后用一个字符串填充它

Posted

技术标签:

【中文标题】C++ - 分配一个无符号字符缓冲区,然后用一个字符串填充它【英文标题】:C++ - Allocate an unsigned char buffer and then fill it with a string 【发布时间】:2014-01-26 17:26:28 【问题描述】:

我真的是 C++ 的新手,所以如果这是一个幼稚的问题,请原谅我 - 但我一直在寻找答案。

我正在尝试创建一个大小为1024unsigned char 数组,我使用以下代码完成了该数组:

unsigned char *r_record = new unsigned char[1024]();

现在我有一个std::string 变量:

std::string hw = "Hello Word";

我想从10'th 字节开始用hw(即“Hello World”)填充r_record

如何将hw 放入r_record

实际上,我的 r_record 数据看起来像(. 为空):

[.........Hello World......and so on]

【问题讨论】:

std::copy(hw.begin(), hw.end(), r_record + 10); @0x499602D2:您为什么将答案发布为粗体 cmets? 你不能不成为新人,但你肯定可以帮助using new。如果您出于某种原因不想使用std::string,请使用std::vector。如果这是家庭作业,请参加更好的课程。 @LightnessRacesinOrbit 我应该删除因为我无法编辑出粗体吗?... @TemplateRex 既然他需要unsigned char,那就不可能是std::string(至少不容易)。但是std::vector<unsigned char> 绝对是正确的选择。 【参考方案1】:

您可以使用std::copy,来自algorithm 标头:

std::copy(hw.begin(), hw.end(), r_record + 10);

如果你想使用向量而不是动态分配的数组(一个好主意),那么

std::vector<unsigned char> r_record(1024); // 1024 zero initialized elements
std::copy(hw.begin(), hw.end(), r_record.begin() + 10);

【讨论】:

只是一个简短的说明:复制字符(这似乎是他要问的);大多数二进制格式(这可能是unsigned char 的缓冲区的原因)也需要一些确定长度的方法。 (当然,他应该使用std::vector&lt;unsigned char&gt;,而不是new unsigned char[]。)

以上是关于C++ - 分配一个无符号字符缓冲区,然后用一个字符串填充它的主要内容,如果未能解决你的问题,请参考以下文章

c++中用new给未知大小的数组分配空间怎么弄?

从无符号字符到 std::string 的 C++ 转换 [重复]

将无符号字符读入字符串

如何将无符号字符数组存储为浮点值?

C程序:用函数更新无符号字符指针数组

C++ 从无符号字符数组创建 GUID