Ну, еще один способ сделать это - заключить вызов в memcpy:
#include <vector>
using namespace std;
template <typename T>
T extract(const vector<unsigned char> &v, int pos)
{
T value;
memcpy(&value, &v[pos], sizeof(T));
return value;
}
int main()
{
vector<unsigned char> v;
//Simulate that we have read a binary file.
//Add some binary data to v.
v.push_back(2);
v.push_back(1);
//00000001 00000010 == 258
int a = extract<__int16>(v,0); //a==258
int b = extract<short>(v,0); //b==258
//add 2 more to simulate extraction of a 4 byte int.
v.push_back(0);
v.push_back(0);
int c = extract<int>(v,0); //c == 258
//Get the last two elements.
int d = extract<short>(v,2); // d==0
return 0;
}
Шаблон функции extract также работает с double, long int, float и т. Д.,
В этом примере нет проверки размера.Мы предполагаем, что v фактически имеет достаточно элементов перед каждым вызовом extract .
Удачи!