0

我想将任何东西的原始数据附加到short, int,和a or 。long longbyteboolchar*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 数组?

4

2 回答 2

2

您可以std::vector<char>为此使用 a :

#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()

于 2013-05-30T12:51:45.500 回答
0

Boost中有一个序列化库。也许你应该看看它。

于 2013-05-30T13:07:35.003 回答