我想将short
,int
,long long
到byte
和bool
的任何内容的原始数据附加到char*
或void*
。
以下是我提出的建议:
template <typename T>
static void memcopyToBytestring(T& target, size_t targetSize, char* previeous, size_t previousSize)
{
if (target && targetSize > 0)
{
char newByteString[previousSize + targetSize];
memcpy(newByteString, previeous, previousSize); //copy old
memcpy(newByteString + previousSize, &target, targetSize); //add new
previousSize += targetSize;
previeous = new char[previousSize];
memcpy(previeous, newByteString, previousSize);
}
}
有些东西似乎已关闭,我甚至不知道如何正确测试这一点(查看target
的数据)
使用案例:我需要根据预定义的协议序列化数据以发送字节。
问题:如何正确地将数据附加到char数组?
答案 0 :(得分:2)
您可以使用std::vector<char>
:
#include <vector>
std::vector<char> stream;
template <typename T>
void AddToStream(T t)
{
stream.insert(stream.end(), (char*)&t, ((char*)&t) + sizeof(t));
}
然后你可以这样做:
AddToStream((int)0x12345678);
AddToStream(true);
AddToStream((byte)27);
这导致了这个数组:
[0x78, 0x56, 0x34, 0x12, 0x01, 0x1B]
最后,要获取字节数组,请使用stream.data()
和stream.size()
答案 1 :(得分:0)
Boost中有一个serialization库。也许你应该看看它。