0

shortint、 、およびからまたはlong longまでの生データを追加したい。byteboolchar*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 に答える