Когда вы передаете массив символов в конструктор, конструктор предполагает, что массив содержит символы и, следовательно, проходит через массив, преобразует каждый символ в целое число и создает вектор из целых чисел.
I думаю, вы могли бы немного «взломать» указатели, чтобы достичь желаемого результата. Вместо того, чтобы передавать указатель на char в векторный конструктор, вы можете привести mychars
к целочисленному указателю, чтобы c ++ рассматривал 4 байта, используемых массивом mychars, как одно целое число. Однако вы должны быть осторожны с размером предполагаемого целочисленного массива, который используется в качестве смещения для конструктора. В вашем случае смещение составляет 1 вместо 4, потому что на каждые 4 символа у вас есть 1 целое число. Однако я заменил его на более общий sizeof(mychars)/sizeof(int))
, чтобы учесть массивы с более чем 4 элементами (элементы mychar должны быть кратны 4).
#include <iostream>
#include <vector>
using namespace std;
/*
Id is between 0 and 3 (inclusive)
*/
char char_from_int(int number, int id) {
return (number >> (8*id)) & 0xff;
}
int main()
{
char mychars[] = { 'A','B','C','D','e','f','g','h' };
vector<int> a((int*)mychars, (int*)mychars +sizeof(mychars)/sizeof(int));
for(int i=0;i<a.size();i++) {
cout<<char_from_int(a[i],0)<<char_from_int(a[i],1)<<char_from_int(a[i],2)<<char_from_int(a[i],3)<<endl;
}
return 0;
}