将Short,Int,Long Long ...的数据附加到char *

时间:2013-05-30 12:34:04

标签: c++

我想将shortintlong longbytebool的任何内容的原始数据附加到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数组?

2 个答案:

答案 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库。也许你应该看看它。