连接字符串和整数以生成字节数组c ++

时间:2017-06-11 08:15:06

标签: c++ arrays

我有一个std字符串,并且我希望连接以生成一个字节数组(unsigned char *)。我不知道如何在c ++中做到这一点,我努力尝试用内存来做。

在java System.arraycopy中诀窍。

这是我的输入:

unsigned long  part1   = 0x0100000002;
std::string part2  = "some_str";

我想要的是无签名的char * combined = part2 + part1

任何提示?

1 个答案:

答案 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☻