У меня есть объект с массивом char; где первые 5 байтов (символ в C ++) являются дополнительными данными, а все последующее - строковым сообщением.
Итак, мой вопрос: как мне получить строку из начального индекса 5 вплоть до последнего байта?
Я знаю, что есть memccpy, но для этого требуется конечный символ, который я не могу знать заранее.
Я знаю, что в C ++ есть строковый объект, но идея состоит в том, чтобы отправлять туда и обратно байтовый массив, который содержит данные и сообщения. Так что в некотором смысле я сериализую и десериализирую туда-сюда.
Есть предложения?
Edit:
Packet * Packet::create(byte const data[])
{
//Concat all first 4 byte values to a uint32
unsigned int length = data[0] << 32 | data[1] << 16 | data[2] << 8 | data[3] << 0;
//4th element is packet type
PacketType type = (PacketType)data[4];
string packetData;
packetData.clear();
char * cdata;
//Check packet data is present
if(sizeof(data) > 5)
{
//string s((char)data);
//packetData = s.substr(4, s.length() - 4);
strncat(cdata,data+5,sizeof(data)-5);
packetData.append(cdata);
}
//Create new packet;
Packet * packet = new Packet(length,type,packetData);
return packet;
};
Он не будет принимать данные [], даже когда я приведу их к типу char.
Аргумент не указатель?
Редактировать ::
Packet * Packet::create(char const * data)
{
//Concat all first 4 byte values to a uint32
unsigned int length = data[0] << 32 | data[1] << 16 | data[2] << 8 | data[3] << 0;
//4th element is packet type
PacketType type = (PacketType)data[4];
//Set packet data, if available
string packetData = (sizeof(data) > 5) ? string(data+5):"";
Packet * packet = new Packet(length,type,packetData);
return packet;
};
Мне все еще нужно проверить это, но мне пришлось использовать char, как мне использовать собственный typedef в этой ситуации?
Кроме того, в чем разница между
"char * data"
а также
"char data []"
Я думал, что массивы и указатели - это одно и то же.