我有一個字符數組的對象;前5個字節(C++中的char)是附加數據,之後的所有內容都是字符串消息。從字符串開始索引到結束字符陣列
所以我的問題是我怎麼能從索引5開始到最後一個字節?
我知道有memccpy,但它需要一個結束字符,我不能預先知道。 我知道在C++中有一個字符串對象,但想法是來回發送一個包含數據和消息的字節數組。所以從某種意義上說,我來回序列化和反序列化。
有什麼建議嗎?
編輯:
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;
};
我還是要考這個,但是我不得不用炭,我怎麼用我自己的typedef在這種情況呢?
而且之間有什麼 區別「的char *數據」 和 「CHAR數據[]」
我認爲數組和指針是同一個東西。
使用:'strncpy'或'strcpy',並且數組在內存中是連續的,所以只需使用'(source + 5)'作爲源緩衝區,以確保從源字符數組中的第5個字符複製。 – 2012-02-03 09:47:41
如果您可以將您的消費者更改爲接受開始/結束對,則根本不需要進行任何複製... – 2012-02-03 10:08:25
'sizeof(data)'錯誤。它會給你指針的大小,而不是它指向的C字符串的長度。改用'strlen(data)'。 – jrok 2012-02-03 11:10:44