Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将不同类型的数据存储到向量中<;char>;?_C++_Casting_Generic Programming - Fatal编程技术网

C++ 将不同类型的数据存储到向量中<;char>;?

C++ 将不同类型的数据存储到向量中<;char>;?,c++,casting,generic-programming,C++,Casting,Generic Programming,我试图编写一个通用函数,将不同数据类型的参数强制转换并存储到向量中。通过强制转换,我的意思是位表示保留在字符向量中。例如,诸如0x19a4f607之类的4字节int将存储在向量中,作为vc[0]=0x19,vc[1]=0xa4,vc[2]=0xf6和vc[3]=0x07 这是我到目前为止写的,但我有一个分段错误。你知道我该怎么解决这个问题吗 template <class T> void push_T(vector<char>& vc, T n){ char*

我试图编写一个通用函数,将不同数据类型的参数强制转换并存储到
向量中。通过强制转换,我的意思是位表示保留在字符向量中。例如,诸如
0x19a4f607
之类的4字节
int
将存储在向量中,作为
vc[0]=0x19
vc[1]=0xa4
vc[2]=0xf6
vc[3]=0x07

这是我到目前为止写的,但我有一个分段错误。你知道我该怎么解决这个问题吗

template <class T>
void push_T(vector<char>& vc, T n){
  char* cp = (char*)&n;
  copy(cp, cp+sizeof(T), vc.end());
}
模板
无效推送(向量和vc,T n){
char*cp=(char*)&n;
复制(cp,cp+sizeof(T),vc.end());
}

您需要一个能够在向量末尾插入的迭代器
.begin()
.end()
只能修改现有元素。请尝试
std::back\u inserter(vc)

这里最直接的问题是您没有努力调整向量的大小,因此您会立即注销基础数组的结尾。您需要在调用
copy()
之前使用
vc.resize(vc.size()+sizeof(T))
,或者使用
std::back\u插入器
insert迭代器强制对副本执行push\u()行为


现在,我假设您首先有一个很好的理由来颠覆类型系统……

一旦您将所有内容都放进去,您打算如何理解向量的内容?你想序列化什么吗?没错。我知道编码的顺序和数据,因此,我不必担心如何解码数据;其中有符号的数据没有意义。