我有一个要转换为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);

最佳答案

std::string背后的整个想法是用一个管理所有内容的类包装C样式字符串(以null结尾的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#不同,您不能仅将内置字节数组“追加”到另一个数组中。如您所建议的,您只需要一个无符号字符的向量。在这种情况下,我将简单地创建一个使用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);

关于c++ - C++字符串到字节数组的转换和加法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32741786/

10-13 07:10