我正在尝试编写一个泛型函数,将不同数据类型的参数转换并存储到vector<char>
中。通过强制转换,我的意思是位表示保留在字符向量中。例如,int
这样的4字节0x19a4f607
将作为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());
}
答案 0 :(得分:1)
你需要一个能够插入向量末尾的迭代器; .begin()
和.end()
只能修改现有元素。试试std::back_inserter(vc)
。
答案 1 :(得分:1)
这里的直接问题是你没有做任何努力来调整你的向量,所以你立即注销底层数组的末尾。您需要在copy()
调用之前加vc.resize(vc.size() + sizeof(T))
,或使用std::back_inserter
插入迭代器强制复制上的push_back()行为。
现在,我假设你有充分的理由首先颠覆类型系统....