我有一个std字符串,并且我希望连接以生成一个字节数组(unsigned char *)。我不知道如何在c ++中做到这一点,我努力尝试用内存来做。
在java System.arraycopy中诀窍。
这是我的输入:
unsigned long part1 = 0x0100000002;
std::string part2 = "some_str";
我想要的是无签名的char * combined = part2 + part1
任何提示?
答案 0 :(得分:-2)
有很多方法可以做到这一点,但是这里有一个使用std::vector
来保存目标缓冲区(并管理与之关联的所有内存分配和释放)和std::memcpy
(与System.arraycopy
类似)进行复制。
unsigned long part1 = 0x0100000002;
std::string part2 = "some_str";
// create a vector big enough to hold both components
std::vector<char> buffer(sizeof(part1) + part2.size());
// copy the string into the beginning of the buffer
std::memcpy(&buffer[0], &part2[0], part2.size());
// copy the int into the space after the string
std::memcpy(&buffer[part2.size()], &part1, sizeof(part1));
std::cout.write(&buffer[0], buffer.size());
std::cout << "\n";
您可以通过char*
之类的操作从std::vector<char>
获取一个普通的旧&buffer[0]
指针,它会获取指向构成向量的基础数组中第一个元素的指针。您可能需要处理自己的空终止,如果您想将其用作字符串(这就是我在示例中使用std::cout.write
而不是std::cout <<
的原因)。
避免使用memcpy并且必须自己处理缓冲区大小的替代方法是使用流:
std::stringstream ss;
ss.write(&part2[0], part2.size());
ss.write(reinterpret_cast<const char*>(&part1), sizeof(part1));
std::string buf = ss.str();
std::cout.write(buf.c_str(), buf.size());
std::cout << "\n";
作为Windows上任一版本的输出,我得到了这个:
some_str☻