Извлечение данных из больших и маленьких порядковых номеров - PullRequest
0 голосов
/ 03 февраля 2020

Предположим, у меня есть функция, которая должна иметь возможность извлекать любой целочисленный тип (char, int, long, и т. Д. c) из любого другого целочисленного типа, потому что некоторые устройства вывода данных любят упаковывать небольшие данные в большие типы данных (ie 4 chars в uint32_t). Я пишу функцию, которая

  1. Принимает массив данных
  2. Принимает ссылку на вектор
  3. Принимает бул, указывающий на порядковый номер

Имеет ли смысл этот фрагмент функции? Я теряю уверенность, чем больше я думаю об этом

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 в маленькой последовательности? Но я так не думаю, потому что это байты, а не куски (?).

...