C++ 追加Short、Int、Long和Long的数据。。。烧焦*
我想将C++ 追加Short、Int、Long和Long的数据。。。烧焦*,c++,C++,我想将short、int、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) {
short
、int
、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);
}
}
模板
静态void memcopyToBytestring(T&target,size\T targetSize,char*previeous,size\T previousSize)
{
如果(目标和目标大小>0)
{
char newByteString[previousSize+targetSize];
memcpy(newByteString,previeous,previousSize);//复制旧的
memcpy(newByteString+previousSize,&target,targetSize);//添加新的
previousSize+=targetSize;
Previous=新字符[previousSize];
memcpy(previeous、newByteString、previousSize);
}
}
有些东西似乎出了问题,我甚至不知道该如何正确地测试它(查看target
的数据)
用例:我需要根据预定义的协议序列化数据以发送字节
问题:如何将数据正确地附加到字符数组中?您可以使用
std::vector来实现以下目的:
#include <vector>
std::vector<char> stream;
template <typename T>
void AddToStream(T t)
{
stream.insert(stream.end(), (char*)&t, ((char*)&t) + sizeof(t));
}
这将导致此阵列:
[0x78, 0x56, 0x34, 0x12, 0x01, 0x1B]
最后,要获取字节数组,请使用stream.data()
和stream.size()
Boost中有一个库。也许你应该看看它。呃。。。什么!?为什么?你想补充一个问题吗?请不要把它用作你的私人博客或记事本。仅用于提问。根据您的建议编辑帖子。谢谢,非常感谢。我被我的*
挂断了,我甚至没有想到向量。很好的回答:)不客气。刚刚意识到,除了使用sizeof(t)
,您还可以编写:stream.insert(stream.end(),(char*)&t,(char*)(&t+1))代码>
[0x78, 0x56, 0x34, 0x12, 0x01, 0x1B]