Предположим, у меня есть функция, которая должна иметь возможность извлекать любой целочисленный тип (char
, int
, long
, и т. Д. c) из любого другого целочисленного типа, потому что некоторые устройства вывода данных любят упаковывать небольшие данные в большие типы данных (ie 4 chars
в uint32_t
). Я пишу функцию, которая
- Принимает массив данных
- Принимает ссылку на вектор
- Принимает бул, указывающий на порядковый номер
Имеет ли смысл этот фрагмент функции? Я теряю уверенность, чем больше я думаю об этом
if(data_type_size == SIZE_OF_UINT32){
uint32_t d = 0;
if(vector_type_size == SIZE_OF_CHAR){
for(size_t i = 0; i < length; i++){
d = data[i];
if(big_endian){
v.push_back((d & 0xFF000000) >> 24);
v.push_back((d & 0x00FF0000) >> 16);
v.push_back((d & 0x0000FF00) >> 8);
v.push_back((d & 0x000000FF));
}
// little endian
else {
v.push_back((d & 0x000000FF));
v.push_back((d & 0x0000FF00) >> 8);
v.push_back((d & 0x00FF0000) >> 16);
v.push_back((d & 0xFF000000) >> 24);
}
}
}
}
Учитывая uint32_t
массив
data[0] = 0x0A0B0C0D;
data[1] = 0x0E0F1011;
Приведенный выше код выводит
0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11
0xd,0xc,0xb,0xa,0x11,0x10,0xf,0xe
Что это такое? Я жду. Я полагаю, откуда я начал понимать, что параноик думает о ... ну ... 4F
на самом деле F4
в маленькой последовательности? Но я так не думаю, потому что это байты, а не куски (?).