C ++ String to byteArray转换和加法

时间:2015-09-23 14:03:42

标签: c++ string bytearray

我有一个字符串,我想将其转换为byteArray,然后我希望将此byteArray添加到另一个byteArray,但在该byteArray的开头

让我们说这是我的字符串

  string suffix = "$PMARVD";

这是我现有的byteArray(忽略那里的对象,它是一个现在无关的.proto对象):

int size = visionDataMsg.ByteSize(); // see how big is it
char* byteArray = new char[size]; //create a bytearray of that size

visionDataMsg.SerializeToArray(byteArray, size); // serialize it 

所以我想做的是这样的事情:

char* byteArrayforSuffix = suffix.convertToByteArray();
char* byteArrayforBoth = byteArrayforSuffix + byteArray;

无论如何在C ++中这样做?

编辑:我应该在连接操作之后添加完整的byteArrayforBoth来处理:

// convert bytearray to vector
vector<unsigned char> byteVector(byteArrayforBoth, byteArrayforBoth + size);

2 个答案:

答案 0 :(得分:2)

std::string背后的整个想法是用管理所有内容的类包装C样式字符串(空终止的charcaters / bytes数组)。

您可以使用std::string::data方法超出内部字符数组。例如:

std::string hello ("hello") , world(" world");
auto helloWorld = hello + world;
const char* byteArray = helloWorld.data();

编辑: ByteArray是char[]unsigned char[]的内置类型,与Java或C#不同,你不能只是&#34;追加&#34;内置字节数组到另一个。正如你的建议,你只需要一个无符号字符的向量。在这种情况下,我只需创建一个利用push_back

的效用函数
void appendBytes(vector<unsigend char>& dest,const char* characterArray,size_t size){
    dest.reserve(dest.size() + size);
    for (size_t i=0;i<size;i++){
       dest.push_back(characterArray[i]);
    }
}

现在,使用您提供的对象:

std::vector<unsigned char> dest;
appendBytes(dest, suffix.data(),suffix.size());
auto another = visionDataMsg.SerializeToArray(byteArray, size); 
appendBytes(dest,another,size);

答案 1 :(得分:0)

废弃内置数组。你有矢量。这是一个完全可用,类型安全的解决方案,花了3分钟输入:

int size = visionDataMsg.ByteSize(); // see how big is it
std::vector<char> byteArray(size);

visionDataMsg.SerializeToArray(&byteArray[0], size); // serialize it 

std::string str("My String");
byteArray.reserve(byteArray.size() + str.size());
std::copy(str.begin(), str.end(), std::back_inserter(byteArray));